Skip to content

iterativerobotpy.py and timedrobotpy.py #161

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

MikeStitt
Copy link
Collaborator

A draft to get progress going.

Copy link
Member

@virtuald virtuald left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall this looks pretty sane.

Copy link
Member

@auscompgeek auscompgeek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some additional early feedback.

@MikeStitt
Copy link
Collaborator Author

Top level questions:

Is the filename right?

Is the file in the right spot in the tree?

Is the class name right?

What are the appropriate tests?

What happens if someone deletes the watchdog? Is the there a higher level watchdog that will stop the motors?

Can somebody figure out how to call the shuffleboard?

@virtuald
Copy link
Member

virtuald commented Apr 6, 2025

I'm not sure about the filename/classname yet. I think you're approaching it as an alternative, but I sorta want a replacement? But, I guess we could go either way.

TBH, before deciding on alternative/replacement, probably need someone to do some testing on a real robot to see if it makes loop overrun issues more/less/same.

What are the appropriate tests?

... yeah, the only real way to test this is likely going to be by testing examples, which is something I'd like to do but haven't taken the time to do (see #154). Java has tests for TimedRobot, but they basically do the same thing that the pyfrc test framework does (maybe that's an argument for moving some of that into here...).

What happens if someone deletes the watchdog? Is the there a higher level watchdog that will stop the motors?

If someone deletes the watchdog, that's their problem -- but also, the motor watchdog is actually a separate thing? This one just tracks loop overruns and tells the user about it.

Can somebody figure out how to call the shuffleboard?

https://robotpy.readthedocs.io/projects/robotpy/en/stable/wpilib.shuffleboard/Shuffleboard.html#wpilib.shuffleboard.Shuffleboard.update

@MikeStitt
Copy link
Collaborator Author

This version simulates a TimedRobot, advances time, logs to AdvantageScope in a reasonable way, but does not move the robot in simulation.

It feels like some sort of enable interlock on the simulator is missing.

Generally all status results from hal.xxx calls seem to result in a strange value, but the calls seem to work.

./rdev.sh ci run
and
./rdev.sh develop

do not seem to make the pure python files editable in place.

Could use some detailed advice on how to get the python files to be editable in place.

@MikeStitt
Copy link
Collaborator Author

This is the code I'm using to simulate: https://github.com/spiresfrc9106/spiresRobot2025/blob/exp-timedrobotpy/robot.py#L46

@virtuald
Copy link
Member

virtuald commented Apr 8, 2025

For develop to work, you have to make sure that all of the packages aren't installed first. pip/setuptools don't do a great job of having an editable/non-editable package installed.

@MikeStitt
Copy link
Collaborator Author

MikeStitt commented Apr 8, 2025

It's hard to tell which libraries need to be uninstalled for mostrobotpy and which need to stay for robotpy:

t2.txt:

robotpy-apriltag
robotpy-cscore
robotpy-hal
robotpy-halsim-ds-socket
robotpy-halsim-gui
robotpy-halsim-ws
robotpy-romi
robotpy-wpilib-utilities
robotpy-wpimath
robotpy-wpinet
robotpy-wpiutil
robotpy-xrp
pip uninstall robotpy
pip install robotpy
pip uninstall -r ~/t2.txt -y
pip uninstall pyntcore
pushd ~/mostrobotpy
./rdev.sh develop
 popd
mikestitt@peas mostRobotPySpires2025 % pip list
Package                   Version                   Editable project location
------------------------- ------------------------- -------------------------------------------------------------------------------
altgraph                  0.17.4
anyio                     4.4.0
appdirs                   1.4.4
astroid                   3.0.3
bcrypt                    4.2.0
black                     25.1.0
certifi                   2024.7.4
cffi                      1.17.0
charset-normalizer        3.4.1
click                     8.1.8
coverage                  7.8.0
cryptography              43.0.0
cxxheaderparser           1.4.1
debugpy                   1.8.11
delocate                  0.13.0
dill                      0.3.9
flexcache                 0.3
flexparser                0.4
h11                       0.14.0
httpcore                  1.0.5
httpx                     0.27.0
idna                      3.7
iniconfig                 2.0.0
invoke                    2.2.0
isort                     5.13.2
macholib                  1.16.3
mccabe                    0.7.0
mypy-extensions           1.0.0
numpy                     2.2.4
ollama                    0.3.1
opencv-python             4.11.0.86
packaging                 23.2
paramiko                  3.4.1
patch                     1.16
pathspec                  0.12.1
pcpp                      1.30
phoenix6                  24.3.0
photonlibpy               2025.2.1
Pint                      0.24.4
pip                       25.0.1
platformdirs              4.3.7
pluggy                    1.5.0
pybind11-stubgen          2.5.3
pycparser                 2.22
pydantic                  1.10.21
pyfrc                     2025.1.0
pylint                    3.0.3
PyNaCl                    1.5.0
pynetconsole              2.0.4
pyntcore                  2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/pyntcore
pytest                    8.3.2
pytest-reraise            2.1.2
PyYAML                    6.0.2
requests                  2.32.3
robotpy                   2025.3.2.0
robotpy-apriltag          2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-apriltag
robotpy-build             2025.1.0
robotpy-cli               2024.0.0
robotpy-cscore            2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-cscore
robotpy-hal               2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-hal
robotpy-halsim-ds-socket  2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-halsim-ds-socket
robotpy-halsim-gui        2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-halsim-gui
robotpy-halsim-ws         2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-halsim-ws
robotpy-installer         2025.1.0
robotpy-navx              2025.0.1.1
robotpy-playingwithfusion 2025.0.0
robotpy-rev               2025.0.3
robotpy-romi              2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-romi
robotpy-wpimath           2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-wpimath
robotpy-wpinet            2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-wpinet
robotpy-wpiutil           2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-wpiutil
robotpy-xrp               2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-xrp
setuptools                74.0.0
setuptools-scm            7.1.0
sniffio                   1.3.1
sphinxify                 0.12
tomli                     2.0.1
tomli_w                   1.2.0
tomlkit                   0.13.2
toposort                  1.10
typing_extensions         4.12.2
urllib3                   2.3.0
wheel                     0.45.1
wpilib                    2025.3.2.0                /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages
mikestitt@peas mostRobotPySpires2025 % robotpy sim                 
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/robotpy/main.py", line 245, in main
    cmd_class = entry_point.load()
                ^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/importlib/metadata/__init__.py", line 205, in load
    module = import_module(match.group('module'))
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 995, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/wpilib/__init__.py", line 1, in <module>
    from . import _init_wpilib
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/wpilib/_init_wpilib.py", line 14, in <module>
    import wpilib._impl._init_wpilibc
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/wpilib/_impl/__init__.py", line 1, in <module>
    from . import _init_wpilibc
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/wpilib/_impl/_init_wpilibc.py", line 15, in <module>
    _lib = CDLL(join(_root, "lib", "libwpilibc.dylib"), mode=RTLD_GLOBAL)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/ctypes/__init__.py", line 379, in __init__
    self._handle = _dlopen(self._name, mode)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: dlopen(/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/wpilib/_impl/lib/libwpilibc.dylib, 0x000A): Library not loaded: @loader_path/../../../ntcore/lib/libntcore.dylib
  Referenced from: <64235283-2B65-3D4F-868A-0BF932086DA9> /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/wpilib/_impl/lib/libwpilibc.dylib
  Reason: tried: '/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/wpilib/_impl/lib/../../../ntcore/lib/libntcore.dylib' (no such file)
Plugin error detected in 'EntryPoint(name='run', value='wpilib._impl.start:Main', group='robotpy')' (use --ignore-plugin-errors to ignore this)
mikestitt@peas mostRobotPySpires2025 % 
mikestitt@peas mostRobotPySpires2025 % pip list                    
Package                   Version                   Editable project location
------------------------- ------------------------- -------------------------------------------------------------------------------
altgraph                  0.17.4
anyio                     4.4.0
appdirs                   1.4.4
astroid                   3.0.3
bcrypt                    4.2.0
black                     25.1.0
certifi                   2024.7.4
cffi                      1.17.0
charset-normalizer        3.4.1
click                     8.1.8
coverage                  7.8.0
cryptography              43.0.0
cxxheaderparser           1.4.1
debugpy                   1.8.11
delocate                  0.13.0
dill                      0.3.9
flexcache                 0.3
flexparser                0.4
h11                       0.14.0
httpcore                  1.0.5
httpx                     0.27.0
idna                      3.7
iniconfig                 2.0.0
invoke                    2.2.0
isort                     5.13.2
macholib                  1.16.3
mccabe                    0.7.0
mypy-extensions           1.0.0
numpy                     2.2.4
ollama                    0.3.1
opencv-python             4.11.0.86
packaging                 23.2
paramiko                  3.4.1
patch                     1.16
pathspec                  0.12.1
pcpp                      1.30
phoenix6                  24.3.0
photonlibpy               2025.2.1
Pint                      0.24.4
pip                       25.0.1
platformdirs              4.3.7
pluggy                    1.5.0
pybind11-stubgen          2.5.3
pycparser                 2.22
pydantic                  1.10.21
pyfrc                     2025.1.0
pylint                    3.0.3
PyNaCl                    1.5.0
pynetconsole              2.0.4
pyntcore                  2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/pyntcore
pytest                    8.3.2
pytest-reraise            2.1.2
PyYAML                    6.0.2
requests                  2.32.3
robotpy                   2025.3.2.0
robotpy-apriltag          2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-apriltag
robotpy-build             2025.1.0
robotpy-cli               2024.0.0
robotpy-cscore            2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-cscore
robotpy-hal               2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-hal
robotpy-halsim-ds-socket  2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-halsim-ds-socket
robotpy-halsim-gui        2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-halsim-gui
robotpy-halsim-ws         2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-halsim-ws
robotpy-installer         2025.1.0
robotpy-navx              2025.0.1.1
robotpy-playingwithfusion 2025.0.0
robotpy-rev               2025.0.3
robotpy-romi              2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-romi
robotpy-wpimath           2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-wpimath
robotpy-wpinet            2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-wpinet
robotpy-wpiutil           2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-wpiutil
robotpy-xrp               2025.3.2.1.dev4+g3f1e12ca /Users/mikestitt/mostrobotpy/subprojects/robotpy-xrp
setuptools                74.0.0
setuptools-scm            7.1.0
sniffio                   1.3.1
sphinxify                 0.12
tomli                     2.0.1
tomli_w                   1.2.0
tomlkit                   0.13.2
toposort                  1.10
typing_extensions         4.12.2
urllib3                   2.3.0
wheel                     0.45.1
wpilib                    2025.3.2.0                /Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages

@virtuald
Copy link
Member

virtuald commented Apr 8, 2025

The error you're getting has to do with a quirk of how macOS support is implemented. What it comes down to is that you need to have all robotpy wrapper dependencies installed the same way (either via develop or installed normally). If you mix it then you sometimes get weird errors like that.

Typically, I use virtualenv (and specifically, virtualenvwrapper) to manage my various python development environments. I don't recommend that normal RobotPy users use virtualenvs unless they're comfortable with them, but they're really useful for python development -- and because they're effectively disposable, you can do a lot of weird changes in one environment without worrying too much about how much you're breaking. Specifically, I have different environments set up for installation from pypi, development, and various branches that I might be working on. If you were using a virtualenv, I would just say delete your virtualenv and start installing packages from scratch.

If you're not using a virtualenv, then just uninstall all robotpy-* packages and wpilib and pyntcore, and then run develop again.

@MikeStitt
Copy link
Collaborator Author

I normally use python3 -m venv .venv, but I made a run without it using my macos python environment.

When I re-ran that in an empty .venv, I ended up with the same family of errors.

My conclusion is the robotpy-rev is not compatible with ./rdev.sh develop

More basic though is that https://github.com/robotpy/mostrobotpy/blob/main/README.md should define the relationship (what they do and where they are and how to find instructions to build/install them) between pc robotpy, the robotpy that get's create by mostrobotpy, which I assume is roborio robotpy, and mostrobotpy.

Also more basic is that https://github.com/robotpy/mostrobotpy/blob/main/README.md should define when to run:

python3 -m pip install robotpy relative to

pip install -r rdev_requirements.txt
pip install numpy

and

./rdev.sh ci run

and

./rdev.sh develop

and the command to python -m pip uninstall -r somefilename.txt to fix up python modules that are installed by python3 -m pip install robotpy but need to be removed before ./rdev.sh develop

then the installation instructions should take one all the way to a git clone of a robotpy project that supports a working:

robotpy sim

@virtuald
Copy link
Member

virtuald commented Apr 8, 2025

My conclusion is the robotpy-rev is not compatible with ./rdev.sh develop

Yes and no.

As mentioned above:

The error you're getting has to do with a quirk of how macOS support is implemented. What it comes down to is that you need to have all robotpy wrapper dependencies installed the same way (either via develop or installed normally). If you mix it then you sometimes get weird errors like that.

What this means is that if you are installing the base robotpy packages in develop mode, you must also install robotpy-rev, ctre, etc in develop mode. To install robotpy-rev, you would need to git clone the repo, and then run python setup.py develop. This only applies to macOS -- on Linux you would be able to pip install robotpy-rev and it would peacefully co-exist with your development install of the other robotpy components.

There might be a way out of the macOS problem by messing with the library name, but I haven't had time to look deeper into it.

I agree there should be more documentation. I also agree the installer scripts should be better to make this easier.

@MikeStitt
Copy link
Collaborator Author

I have been trying lots of different paths to build mostrobotpy editable on OSX, Debian, and Windows, on a full production robot code base in simulation.

Goal is to be able to run

robotpy sim

on real robot code.
Generally what I have been doing is to:

(I'm typing not cut and pasting so there may be some typo's here)

python -m venv .venv
. .venv/bin/activate
python -m pip install robotpy
git clone mostrobotpy_URL
cd mostrobotpy
python -m pip install -r rdev_requirements.txt
python -m pip install numpy
python -m pip install robotpy_build

# repeatably pip uninstall the repos that were installed by robotpy that need to be uninstalled for a develop build to work until none are installed

#export the env variables to run ccache and multiple processors
./rdev.sh develop
cd ..
git clone robotpy-rev_URL
cd robotpy-rev
python setup.py develop

I end up with two copies of many of the repos needed in the system:

(.venv) mikes@debian-12:~/first/pythonExperiments/tryRobotPyBuildEditable/robotpy-rev$ pip list
Package                  Version              Editable project location
------------------------ -------------------- --------------------------------------------------------------------------------------------------------------------------------------------------
black                    25.1.0
certifi                  2025.1.31
charset-normalizer       3.4.1
click                    8.1.8
cxxheaderparser          1.4.1
distro                   1.9.0
idna                     3.10
iniconfig                2.1.0
mypy-extensions          1.0.0
numpy                    2.2.4
packaging                24.2
patch                    1.16
pathspec                 0.12.1
pcpp                     1.30
pip                      23.0.1
platformdirs             4.3.7
pluggy                   1.5.0
pybind11-stubgen         2.5.3
pydantic                 1.10.21
pyntcore                 2025.3.2.0           /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/.venv/lib/python3.11/site-packages/pyntcore-2025.3.2.0-py3.11-linux-aarch64.egg
pyntcore                 0.1.dev3180+g21bab63 /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/pyntcore
pytest                   8.3.5
PyYAML                   6.0.2
requests                 2.32.3
robotpy                  2025.3.2.0
robotpy-apriltag         0.1.dev3180+g21bab63 /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-apriltag
robotpy-build            2025.1.0
robotpy-cli              2024.0.0
robotpy-cscore           0.1.dev3180+g21bab63 /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-cscore
robotpy-hal              2025.3.2.0           /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/.venv/lib/python3.11/site-packages/robotpy_hal-2025.3.2.0-py3.11-linux-aarch64.egg
robotpy-hal              0.1.dev3180+g21bab63 /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-hal
robotpy-halsim-ds-socket 0.1.dev3180+g21bab63 /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-halsim-ds-socket
robotpy-halsim-gui       0.1.dev3180+g21bab63 /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-halsim-gui
robotpy-halsim-ws        0.1.dev3180+g21bab63 /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-halsim-ws
robotpy-rev              2025.0.3             /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/robotpy-rev
robotpy-romi             0.1.dev3180+g21bab63 /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-romi
robotpy-wpilib-utilities 2025.0.0
robotpy-wpimath          2025.3.2.0           /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/.venv/lib/python3.11/site-packages/robotpy_wpimath-2025.3.2.0-py3.11-linux-aarch64.egg
robotpy-wpimath          0.1.dev3180+g21bab63 /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpimath
robotpy-wpinet           2025.3.2.0           /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/.venv/lib/python3.11/site-packages/robotpy_wpinet-2025.3.2.0-py3.11-linux-aarch64.egg
robotpy-wpinet           0.1.dev3180+g21bab63 /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpinet
robotpy-wpiutil          2025.3.2.0           /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/.venv/lib/python3.11/site-packages/robotpy_wpiutil-2025.3.2.0-py3.11-linux-aarch64.egg
robotpy-wpiutil          0.1.dev3180+g21bab63 /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpiutil
robotpy-xrp              0.1.dev3180+g21bab63 /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-xrp
setuptools               66.1.1
setuptools-scm           7.1.0
sphinxify                0.12
tomli                    2.2.1
tomli_w                  1.2.0
tomlkit                  0.13.2
toposort                 1.10
trpbe                    2025.0.1             /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable
typing_extensions        4.13.2
urllib3                  2.4.0
wheel                    0.45.1
wpilib                   2025.3.2.0           /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/.venv/lib/python3.11/site-packages/wpilib-2025.3.2.0-py3.11-linux-aarch64.egg
wpilib                   0.1.dev3180+g21bab63 /home/mikes/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib

I can uninstall those with pip unstinall repo==version commands.

But then I need to install a specific version of photonlibpy:

python -m pip install photonlibpy==version

which will then also uninstalls the editable development parts of robotpy

Note that I have been automating these steps here: https://github.com/MikeStitt/pythonExperiments/tree/main/tryRobotPyBuildEditable

But as I search online for ways to tell pip to install libraries without overwriting existing editable or development libraries, it seems like I might not be following normal development practices, and there are not easy ways to keep pip from overwriting editable development libaries as more tools get installed.

This seems to be the same on debian, and osx, (I haven't got my windows build to complete yet).

Thoughts on a valid development/debugging/testing installation process?

-Mike

@virtuald
Copy link
Member

virtuald commented Apr 15, 2025

The multiple package problem is likely caused by pip. I note that you have 23.1 installed, try upgrading.

The version numbers for your editable installs are 0.1.dev3180+g21bab63... which is really really weird. I would have expected them to start with the latest tag. This might be either pip, setuptools, or setuptools-scm causing a problem (or perhaps you don't have the full git history checked out?). I believe the version numbers for editable installs work fine for me at home, but I can't check now.

photonlibpy has a pinned dependency on >=2025.3.2, so when you pip install it, pip notices that the wrong version is installed (as noted above) and installs a newer one.

Telling pip to ignore dependencies (via --no-deps) is probably the only way to resolve this unless you can fix the version numbers on your editable installs. On the one hand, while this isn't recommended for general usage, in my opinion it's perfectly acceptable for a development environment where you're trying to control all the dependencies.

@virtuald
Copy link
Member

One last note, because I don't trust setuptools to do the right thing, I run python setup.py develop -N to make sure that it also doesn't try to install dependencies -- so I'd recommend that for your robotpy-rev install.

We will not be using setuptools next year, so hopefully some of that will go away.

@MikeStitt
Copy link
Collaborator Author

My windows builds using x64 Native Tools Command Prompt fail this way:

"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\bin\HostX86\x64\link.exe" /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO /LIBPATH:c:\users\mikestitt\documents\first\pythonexperiments\tryrobotpybuildeditable\mostrobotpy\subprojects\robotpy-wpiutil\wpiutil\lib /LIBPATH:c:\users\mikestitt\documents\first\pythonexperiments\tryrobotpybuildeditable\mostrobotpy\subprojects\robotpy-wpinet\wpinet\lib /LIBPATH:c:\users\mikestitt\documents\first\pythonexperiments\tryrobotpybuildeditable\mostrobotpy\subprojects\pyntcore\ntcore\lib /LIBPATH:build\temp.win-amd64-cpython-312\dlstatic\opencv_cpp\lib /LIBPATH:build\temp.win-amd64-cpython-312\dlstatic\cscore_cpp\lib /LIBPATH:build\temp.win-amd64-cpython-312\dlstatic\cameraserver_cpp\lib /LIBPATH:C:\Users\MikeStitt\Documents\first\pythonExperiments\tryRobotPyBuildEditable\.venvTrpbe\libs /LIBPATH:C:\Users\MikeStitt\AppData\Local\Programs\Python\Python312\libs /LIBPATH:C:\Users\MikeStitt\AppData\Local\Programs\Python\Python312 /LIBPATH:C:\Users\MikeStitt\Documents\first\pythonExperiments\tryRobotPyBuildEditable\.venvTrpbe\PCbuild\amd64 "/LIBPATH:C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\ATLMFC\lib\x64" "/LIBPATH:C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.22000.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22000.0\\um\x64" "/LIBPATH:C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\ATLMFC\lib\x64" "/LIBPATH:C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.22000.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22000.0\\um\x64" cameraserver.lib cscore.lib opencv480.lib ntcore.lib wpinet.lib wpiutil.lib /EXPORT:PyInit__cscore build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\gensrc\cscore\CameraServer.obj build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\gensrc\cscore\cscore_cpp.obj build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\gensrc\cscore\cscore_cv.obj build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\gensrc\cscore\cscore_oo.obj build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\gensrc\cscore\cscore_runloop.obj build\temp.win-amd64-cpython-312\Release\cscore\cvnp\cvnp.obj build\temp.win-amd64-cpython-312\Release\cscore\cvnp\cvnp_synonyms.obj build\temp.win-amd64-cpython-312\Release\cscore\src\main.obj /OUT:build\lib.win-amd64-cpython-312\cscore\_cscore.cp312-win_amd64.pyd /IMPLIB:build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\gensrc\cscore\_cscore.cp312-win_amd64.lib
   Creating library build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\gensrc\cscore\_cscore.cp312-win_amd64.lib and object build\temp.win-amd64-cpython-312\Release\build\temp.win-amd64-cpython-312\gensrc\cscore\_cscore.cp312-win_amd64.exp
cscore.lib(cscore_cpp.obj) : error LNK2001: unresolved external symbol _Cnd_timedwait_for_unchecked
cscore.lib(HttpCameraImpl.obj) : error LNK2001: unresolved external symbol _Cnd_timedwait_for_unchecked
cscore.lib(SourceImpl.obj) : error LNK2001: unresolved external symbol _Cnd_timedwait_for_unchecked
cscore.lib(Telemetry.obj) : error LNK2001: unresolved external symbol _Cnd_timedwait_for_unchecked
cscore.lib(RawSinkImpl.obj) : error LNK2001: unresolved external symbol _Thrd_sleep_for
cscore.lib(HttpCameraImpl.obj) : error LNK2001: unresolved external symbol _Thrd_sleep_for
cscore.lib(MjpegServerImpl.obj) : error LNK2001: unresolved external symbol _Thrd_sleep_for
cscore.lib(MjpegServerImpl.obj) : error LNK2001: unresolved external symbol __std_search_1
build\lib.win-amd64-cpython-312\cscore\_cscore.cp312-win_amd64.pyd : fatal error LNK1120: 3 unresolved externals
error: command 'C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Tools\\MSVC\\14.36.32532\\bin\\HostX86\\x64\\link.exe' failed with exit code 1120

@virtuald
Copy link
Member

That error seems really familiar, I think we ran into it last year? I don't use Windows at all these days.

I think you need to upgrade Visual Studio... according to this CD post you need 17.9 or later?

@MikeStitt
Copy link
Collaborator Author

This feels like a silly question, really bad planning on my part.

But in debian bookworm I get:

mikes@debian-12:~/first/pythonExperiments/tryRobotPyBuildEditable$ rm -rf .venv
mikes@debian-12:~/first/pythonExperiments/tryRobotPyBuildEditable$ python -m venv .venv
mikes@debian-12:~/first/pythonExperiments/tryRobotPyBuildEditable$ . .venv/bin/activate
(.venv) mikes@debian-12:~/first/pythonExperiments/tryRobotPyBuildEditable$ robotpy --help
bash: robotpy: command not found
(.venv) mikes@debian-12:~/first/pythonExperiments/tryRobotPyBuildEditable$ python -m pip cache purge
Files removed: 18
(.venv) mikes@debian-12:~/first/pythonExperiments/tryRobotPyBuildEditable$ python -m pip install robotpy
Collecting robotpy
  Downloading robotpy-2025.3.2.0-py3-none-any.whl (2.2 kB)
Collecting robotpy-wpiutil==2025.3.2.0
  Downloading robotpy_wpiutil-2025.3.2.0-cp311-cp311-manylinux_2_36_aarch64.whl (3.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4/3.4 MB 8.7 MB/s eta 0:00:00
Collecting robotpy-wpinet==2025.3.2.0
  Downloading robotpy_wpinet-2025.3.2.0-cp311-cp311-manylinux_2_36_aarch64.whl (748 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 749.0/749.0 kB 13.5 MB/s eta 0:00:00
Collecting robotpy-wpimath==2025.3.2.0
  Downloading robotpy_wpimath-2025.3.2.0-cp311-cp311-manylinux_2_36_aarch64.whl (6.9 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.9/6.9 MB 17.9 MB/s eta 0:00:00
Collecting pyntcore==2025.3.2.0
  Downloading pyntcore-2025.3.2.0-cp311-cp311-manylinux_2_36_aarch64.whl (2.0 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 25.2 MB/s eta 0:00:00
Collecting robotpy-hal==2025.3.2.0
  Downloading robotpy_hal-2025.3.2.0-cp311-cp311-manylinux_2_36_aarch64.whl (1.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4/1.4 MB 27.7 MB/s eta 0:00:00
Collecting wpilib==2025.3.2.0
  Downloading wpilib-2025.3.2.0-cp311-cp311-manylinux_2_36_aarch64.whl (5.3 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.3/5.3 MB 30.4 MB/s eta 0:00:00
Collecting robotpy-wpilib-utilities<2026.0.0,>=2025.0.0
  Downloading robotpy_wpilib_utilities-2025.0.0-py3-none-any.whl (48 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 49.0/49.0 kB 17.8 MB/s eta 0:00:00
Collecting robotpy-cli<2026.0.0,>=2024.0.0
  Downloading robotpy_cli-2024.0.0-py3-none-any.whl (8.9 kB)
Installing collected packages: robotpy-wpiutil, robotpy-cli, robotpy-wpinet, robotpy-wpimath, robotpy-hal, pyntcore, wpilib, robotpy-wpilib-utilities, robotpy
Successfully installed pyntcore-2025.3.2.0 robotpy-2025.3.2.0 robotpy-cli-2024.0.0 robotpy-hal-2025.3.2.0 robotpy-wpilib-utilities-2025.0.0 robotpy-wpimath-2025.3.2.0 robotpy-wpinet-2025.3.2.0 robotpy-wpiutil-2025.3.2.0 wpilib-2025.3.2.0
(.venv) mikes@debian-12:~/first/pythonExperiments/tryRobotPyBuildEditable$ robotpy --help
usage: robotpy [-h] [--main MAIN_FILE] [-v] [--ignore-plugin-errors] {run} ...

RobotPy CLI. See below for subcommands to accomplish various tasks for your robot project.

positional arguments:
  {run}                 subcommands
    run                 Executes the robot code using the currently installed HAL (this is probably not what you want unless you're on the
                        roboRIO)

options:
  -h, --help            show this help message and exit
  --main MAIN_FILE      The file that contains your main robot class
  -v, --verbose         Enable debug logging
  --ignore-plugin-errors
                        Ignore errors caused by RobotPy plugins (probably should fix or replace instead!)
(.venv) mikes@debian-12:~/first/pythonExperiments/tryRobotPyBuildEditable$ 


Debian bookworm doesn't support robotpy sim?

@virtuald
Copy link
Member

WPILib does not support simulation on linux/aarch64

@virtuald
Copy link
Member

Actually, that doesn't seem to be true anymore, https://frcmaven.wpi.edu/ui/native/release/edu/wpi/first/halsim/halsim_gui/2025.3.2/ shows aarch64 packages. We would need to update mostrobotpy to build them and update the robotpy-meta constraints.

@auscompgeek
Copy link
Member

auscompgeek commented Apr 17, 2025

I thought we do build it, it's just that by default robotpy-meta doesn't install the sim stuff on Linux aarch64?

@MikeStitt
Copy link
Collaborator Author

MikeStitt commented Apr 18, 2025

I have found a route to simulate a full robot with mostrobotpy editable on a OSX M3 Mac:

First install ccache

Then:

git clone git@github.com:MikeStitt/pythonExperiments.git
cd pythonExperiments
cd tryRobotPyBuildEditable
deactivate ; rm -rf .venvTryRobotPyBuildEditable mostrobotpy mostRobotPySpires2025 robotpy-rev ; python3 -m venv .venvTryRobotPyBuildEditable ; . .venvTryRobotPyBuildEditable/bin/activate ; pip install -e . ; 

Python click module does most of the heavy lifting:

trpbe --quiet --toml trpbeConfigMikeStitt.toml doeditable

Which runs these commands:

command=git clone git@github.com:MikeStitt/mostrobotpy.git mostrobotpy
command=git -C mostrobotpy checkout pyIterativeAndTimedRobot
command=git clone https://github.com/robotpy/robotpy-rev robotpy-rev
command=git -C robotpy-rev checkout main
command=git clone git@github.com:spiresfrc9106/spiresRobot2025.git mostRobotPySpires2025
command=git -C mostRobotPySpires2025 checkout exp-timedrobotpy
command=pip install robotpy
command=cd mostrobotpy
command=pip install -r rdev_requirements.txt
command=pip install numpy
command=cd ..
command=pip install robotpy-build
command=cd mostRobotPySpires2025
command=python -m robotpy sync
command=cd ..
command=pip list --format json
command=pip uninstall -y robotpy-cscore
command=pip uninstall -y robotpy-wpinet
command=pip uninstall -y robotpy-apriltag
command=pip uninstall -y pyntcore
command=pip uninstall -y robotpy-wpiutil
command=pip uninstall -y robotpy-hal
command=pip uninstall -y robotpy-wpimath
command=pip uninstall -y wpilib
command=pip uninstall -y robotpy-halsim-gui
command=pip uninstall -y robotpy-rev
command=pip list --format json
command=cd mostrobotpy
command=python -m devtools develop
command=cd ..
command=cd robotpy-rev
command=python setup.py develop -N
command=cd ..

Then:

cd mostRobotPySpires2025
robotpy sim

Things that were not obvious were:

  • robotpy is a separate tool from mostrobotpy
  • Don't run /rdev.sh ci run because it builds and installs mostrobotpy and we don't want mostrobotpy installed when in development mode
  • If one doesn't run /rdev.sh ci run one needs to pip install robotpy-build in order for the build editable to work.
  • It's best to use robotpy sync to get all of the libaries synced for the robotpy sim before building mostrbootpy because robotpy sync and most pip installs will overwrite the editable mostrobotpy
  • That the libaries that are built editable need to be uninstalled prior to building them editable (this is a basic truth in python development)
  • That it's wise to repeatedly uninstall all the editable libraries until none are installed because sometimes one might have multilibraries installed with the same name
  • That robotpy-rev should be built: python setup.py develop -N with the -N to keep it from replacing other editable libraries.
  • That x64 linux and the intel Mac or M3 Mac are supported for building and simulating robotpy editable. x64 windows might be supported based upon a chief delphi post. linux/aarch64 is supported for building editable but not quite supported for simulation.

@auscompgeek
Copy link
Member

linux/aarch64 is supported for building editable but not quite supported for simulation.

Simulation should work fine on Linux aarch64. I've run the simulation for the examples on my Raspberry Pi 400.

@MikeStitt
Copy link
Collaborator Author

linux/aarch64 is supported for building editable but not quite supported for simulation.

Simulation should work fine on Linux aarch64. I've run the simulation for the examples on my Raspberry Pi 400.

I created this issue to document where we are currently at: robotpy/robotpy-meta#33

@MikeStitt
Copy link
Collaborator Author

Getting pretty close to the final product. It feels like I've resolved most of the review comments. Adding the docstrings uncovered some new conversations we should have about consistency in the API.

The remaining tasks include: resolve the remaining todo's in the code, add unit tests, perhaps functional tests, test to see how how much slower the python version is, and test as a command2 TimedCommandRobot.

@virtuald @auscompgeek, please look at the todo's in the code.

@MikeStitt
Copy link
Collaborator Author

Now that this test passes on my machine: subprojects/robotpy-wpilib/tests/test_timedrobot.py which just tests the scheduling math to schedule the future periodic callbacks, I'm fairly confident that the code is pretty close to working correctly.

Perhaps @virtuald or @auscompgeek have suggestions on how to connect existing functional tests to this code?

@virtuald
Copy link
Member

virtuald commented May 1, 2025

Well. There really aren't any python functional tests for this -- we're pretty light on testing since the wrapper stuff tends to Just Work if it compiles. The examples repo does full-robot tests -- eventually I'd like to run those tests as part of the CI for this repo, but haven't gotten around to it.

It would probably make sense to port the tests in allwpilib from Java or C++ to python, assuming they exist. ChatGPT might give you a good first translation of them.

@MikeStitt
Copy link
Collaborator Author

Is there a spot in the existing robotpy code base that is equivalent to this line?

https://github.com/wpilibsuite/allwpilib/blob/e63899e63af065eb326bdbb2cf1457cf27433bd9/wpilibc/src/test/native/cpp/TimedRobotTest.cpp#L88

In the existing robotpy code base is the thread a c++ thread or a python thread?

I’m hoping to not have pave new ground in the threading model of the new test.

@MikeStitt
Copy link
Collaborator Author

Okay I will rebase on the current main.

@MikeStitt
Copy link
Collaborator Author

How would I install the artifacts from github the build:

1 - In MacOs?
2 - In Windows?
3 - On a Roborio

@MikeStitt
Copy link
Collaborator Author

MikeStitt commented May 21, 2025

One thing I have noticed with TimedRobot and TimedRobotPy is that when TimedRobot.addPeriodic is called multiple times with the same offset and period the order in which the various callbacks are executed is arbitrary on every beat of the period. That inconsistency bothers me.

@virtuald
Copy link
Member

I've pushed releases for rev, navx, urcl, and playingwithfusion -- so all of those should be available on PyPI within the next 20 minutes or so.

To install releases from github, you can download the zip file from the action and unzip it somewhere. Then use pip install --find-links /path/to/zipfiles NAME to install them, or pip install /path/to/NAME.whl.

Installation on RoboRIO is a bit more tricky because it depends on the robotpy package which enforces certain versions, but I should be able to push a robotpy release tonight. In theory, you should be able to copy the wheels to ~/wpilib/2025/robotpy/pip_cache and the installer will be able to find them however.

@virtuald
Copy link
Member

I haven't looked very hard at how TimedRobot works, so it's not clear to me whether that is expected behavior or not.

I would assume that the timing is arbitrary, but I could see how one might think otherwise.

@MikeStitt MikeStitt changed the title First version of iterativerobotpy.py iterativerobotpy.py and timedrobotpy.py May 21, 2025
@MikeStitt MikeStitt force-pushed the pyIterativeAndTimedRobot branch from 3eccb59 to 14c4096 Compare May 21, 2025 17:57
@MikeStitt
Copy link
Collaborator Author

@virtuald looking at dist.yml

I picked off these commands:

cd mostrobotpy
python -m pip --disable-pip-version-check install -r rdev_requirements.txt
./rdev.sh ci check-pyproject
./rdev.sh ci build-other-wheels
python -m pip --disable-pip-version-check install numpy
python -m devtools ci build-meson-wheels

It crashes here:

Installing collected packages: wpilib
  Attempting uninstall: wpilib
    Found existing installation: wpilib 2025.3.2.1
    Uninstalling wpilib-2025.3.2.1:
      Successfully uninstalled wpilib-2025.3.2.1
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
robotpy 2025.3.2.1 requires pyntcore==2025.3.2.1, but you have pyntcore 2025.3.2.2 which is incompatible.
robotpy 2025.3.2.1 requires robotpy-hal==2025.3.2.1, but you have robotpy-hal 2025.3.2.2 which is incompatible.
robotpy 2025.3.2.1 requires robotpy-wpimath==2025.3.2.1, but you have robotpy-wpimath 2025.3.2.2 which is incompatible.
robotpy 2025.3.2.1 requires robotpy-wpinet==2025.3.2.1, but you have robotpy-wpinet 2025.3.2.2 which is incompatible.
robotpy 2025.3.2.1 requires robotpy-wpiutil==2025.3.2.1, but you have robotpy-wpiutil 2025.3.2.2 which is incompatible.
robotpy 2025.3.2.1 requires wpilib==2025.3.2.1, but you have wpilib 2025.3.2.2 which is incompatible.
Successfully installed wpilib-2025.3.2.2
+ /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/bin/python -m pip --disable-pip-version-check install -r /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/tests/requirements.txt
Requirement already satisfied: pytest in /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages (from -r /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/tests/requirements.txt (line 1)) (8.3.5)
Requirement already satisfied: pytest-reraise in /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages (from -r /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/tests/requirements.txt (line 2)) (2.1.2)
Requirement already satisfied: iniconfig in /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages (from pytest->-r /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/tests/requirements.txt (line 1)) (2.1.0)
Requirement already satisfied: packaging in /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages (from pytest->-r /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/tests/requirements.txt (line 1)) (25.0)
Requirement already satisfied: pluggy<2,>=1.5 in /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages (from pytest->-r /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/tests/requirements.txt (line 1)) (1.6.0)
+ /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/bin/python run_tests.py
ImportError while loading conftest '/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/tests/conftest.py'.
conftest.py:5: in <module>
    from wpilib.simulation._simulation import _resetWpilibSimulationData
../wpilib/__init__.py:1: in <module>
    from . import _init__wpilib
E   ImportError: cannot import name '_init__wpilib' from partially initialized module 'wpilib' (most likely due to a circular import) (/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/wpilib/__init__.py)
Traceback (most recent call last):
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/tests/run_tests.py", line 12, in <module>
    subprocess.check_call([sys.executable, "-m", "pytest"])
    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/subprocess.py", line 419, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/bin/python', '-m', 'pytest']' returned non-zero exit status 4.
ERROR: robotpy-wpilib: Command '('/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/bin/python', 'run_tests.py')' returned non-zero exit status 1.

Which is strange, because it seems like the online builds are working.

@MikeStitt
Copy link
Collaborator Author

I also tried this:

./rdev.sh develop robotpy-wpilib
+ /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/bin/python3 -m pip --disable-pip-version-check install -v -e . --no-build-isolation
Using pip 25.1.1 from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip (python 3.13)
Obtaining file:///Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib
  Running command Checking if build backend supports build_editable
  Checking if build backend supports build_editable ... done
  Running command Preparing editable metadata (pyproject.toml)
  + meson setup /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/build/cp313 -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/build/cp313/hatch-meson-native-file.ini
  The Meson build system
  Version: 1.8.0
  Source dir: /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib
  Build dir: /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/build/cp313
  Build type: native build
  Project name: wpilib
  Project version: undefined
  C++ compiler for the host machine: ccache c++ (clang 15.0.0 "Apple clang version 15.0.0 (clang-1500.3.9.4)")
  C++ linker for the host machine: c++ ld64 1053.12
  Host machine cpu family: aarch64
  Host machine cpu: aarch64
  Program python found: YES (/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/bin/python3)
  Fetching value of define "__cplusplus" : 202002L
  Found pkg-config: YES (/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/bin/pkg-config) 2.4.3
  Run-time dependency robotpy-native-wpilib found: YES 2025.3.2
  Run-time dependency wpimath_filter found: YES
  Run-time dependency semiwrap found: YES 2025
  Dependency robotpy-native-wpilib found: YES 2025.3.2 (cached)
  Run-time dependency wpimath_geometry found: YES
  Dependency semiwrap found: YES 2025 (cached)
  Dependency robotpy-native-wpilib found: YES 2025.3.2 (cached)
  Run-time dependency wpihal found: YES
  Run-time dependency wpiutil found: YES
  Run-time dependency ntcore found: YES
  Run-time dependency wpimath found: YES
  Dependency wpimath_geometry found: YES unknown (cached)
  Run-time dependency wpimath_controls found: YES
  Dependency semiwrap found: YES 2025 (cached)
  Dependency robotpy-native-wpilib found: YES 2025.3.2 (cached)
  Dependency semiwrap found: YES 2025 (cached)
  Dependency robotpy-native-wpilib found: YES 2025.3.2 (cached)
  Dependency semiwrap found: YES 2025 (cached)
  Dependency robotpy-native-wpilib found: YES 2025.3.2 (cached)
  Dependency semiwrap found: YES 2025 (cached)
  Dependency robotpy-native-wpilib found: YES 2025.3.2 (cached)
  Dependency wpimath_controls found: YES unknown (cached)
  Dependency wpimath_geometry found: YES unknown (cached)
  Run-time dependency wpimath_kinematics found: YES
  Dependency semiwrap found: YES 2025 (cached)
  Run-time dependency python found: YES 3.13
  Build targets in project: 648

  wpilib undefined

    User defined options
      Native files: /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/build/cp313/hatch-meson-native-file.ini
      b_ndebug    : if-release
      b_vscrt     : md
      buildtype   : release

  Found ninja-1.11.1.git.kitware.jobserver-1 at /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/bin/ninja
  + /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/bin/ninja
  [1/885] Generating semiwrap/_init__event.py with a custom command
  [2/885] Generating semiwrap/_init__drive.py with a custom command
  [3/885] Generating semiwrap/_init__wpilib.py with a custom command
  [4/885] Generating semiwrap/_init__interfaces.py with a custom command
  [5/885] Generating semiwrap/_init__counter.py with a custom command
  [6/885] Generating semiwrap/_init__shuffleboard.py with a custom command
  [7/885] Generating semiwrap/wpilib_event.casters.pkl with a custom command
  [8/885] Generating semiwrap/wpilib_interfaces.casters.pkl with a custom command
  [9/885] Generating semiwrap/wpilib.casters.pkl with a custom command
  [10/885] Generating semiwrap/wpilib_drive.casters.pkl with a custom command
  [11/885] Generating semiwrap/wpilib_counter.casters.pkl with a custom command
  [12/885] Generating semiwrap/wpilib_shuffleboard.casters.pkl with a custom command
  [13/885] Generating semiwrap/_init__simulation.py with a custom command
  [14/885] Generating semiwrap/wpilib_counter.pc with a custom command
  [15/885] Generating semiwrap/wpilib_drive.pc with a custom command
  [16/885] Generating semiwrap/wpilib_interfaces.pc with a custom command
  [17/885] Generating semiwrap/wpilib_simulation.casters.pkl with a custom command
  [18/885] Generating semiwrap/wpilib_shuffleboard.pc with a custom command
  [19/885] Generating semiwrap/wpilib.pc with a custom command
  [20/885] Generating semiwrap/wpilib_event.pc with a custom command
  [21/885] Generating semiwrap/wpilib_simulation.pc with a custom command
  [22/885] Generating semiwrap/GenericHID.dat with a custom command
  [23/885] Generating semiwrap/Alert.dat with a custom command
  [24/885] Generating semiwrap/ADXL345_I2C.dat with a custom command
  [25/885] Generating semiwrap/AnalogAccelerometer.dat with a custom command
  [26/885] Generating semiwrap/AnalogEncoder.dat with a custom command
  [27/885] Generating semiwrap/EventLoop.dat with a custom command
  [28/885] Generating semiwrap/GenericHID.cpp with a custom command
  [29/885] Generating semiwrap/AnalogEncoder.cpp with a custom command
  [30/885] Generating semiwrap/Alert.cpp with a custom command
  [31/885] Generating semiwrap/ADXL345_I2C.cpp with a custom command
  [32/885] Generating semiwrap/AnalogInput.dat with a custom command
  [33/885] Generating semiwrap/AnalogAccelerometer.cpp with a custom command
  [34/885] Generating semiwrap/EventLoop.cpp with a custom command
  [35/885] Generating semiwrap/CounterBase.dat with a custom command
  [36/885] Generating semiwrap/AnalogInput.cpp with a custom command
  [37/885] Generating semiwrap/AnalogOutput.dat with a custom command
  [38/885] Generating semiwrap/MotorController.dat with a custom command
  [39/885] Generating semiwrap/AnalogTriggerType.dat with a custom command
  [40/885] Generating semiwrap/ADXL362.dat with a custom command
  [41/885] Generating semiwrap/AnalogTrigger.dat with a custom command
  [42/885] Generating semiwrap/CounterBase.cpp with a custom command
  [43/885] Generating semiwrap/ADXL345_SPI.dat with a custom command
  [44/885] Generating semiwrap/AnalogTriggerOutput.dat with a custom command
  [45/885] Generating semiwrap/AnalogPotentiometer.dat with a custom command
  [46/885] Generating semiwrap/ADIS16470_IMU.dat with a custom command
  [47/885] Generating semiwrap/BuiltInAccelerometer.dat with a custom command
  [48/885] Generating semiwrap/MotorController.cpp with a custom command
  [49/885] Generating semiwrap/semiwrap_init.wpilib.interfaces._interfaces.hpp with a custom command
  [50/885] Generating semiwrap/BooleanEvent.dat with a custom command
  [51/885] Generating semiwrap/ADIS16448_IMU.dat with a custom command
  [52/885] Generating semiwrap/NetworkBooleanEvent.dat with a custom command
  [53/885] Generating semiwrap/ADXL345_SPI.cpp with a custom command
  [54/885] Generating semiwrap/AnalogOutput.cpp with a custom command
  [55/885] Generating semiwrap/ADXL362.cpp with a custom command
  [56/885] Generating semiwrap/AnalogTriggerType.cpp with a custom command
  [57/885] Generating semiwrap/CAN.dat with a custom command
  [58/885] Generating semiwrap/AnalogTrigger.cpp with a custom command
  [59/885] Generating semiwrap/AnalogPotentiometer.cpp with a custom command
  [60/885] Generating semiwrap/AnalogTriggerOutput.cpp with a custom command
  [61/885] Generating semiwrap/ADIS16470_IMU.cpp with a custom command
  [62/885] Generating semiwrap/BuiltInAccelerometer.cpp with a custom command
  [63/885] Generating semiwrap/BooleanEvent.cpp with a custom command
  [64/885] Generating semiwrap/ADIS16448_IMU.cpp with a custom command
  [65/885] Generating semiwrap/semiwrap_init.wpilib.event._event.hpp with a custom command
  [66/885] Generating semiwrap/NetworkBooleanEvent.cpp with a custom command
  [67/885] Generating semiwrap/CAN.cpp with a custom command
  [68/885] Generating semiwrap/CompressorConfigType.dat with a custom command
  [69/885] Generating semiwrap/DSControlWord.dat with a custom command
  [70/885] Generating semiwrap/DataLogManager.dat with a custom command
  [71/885] Generating semiwrap/DigitalGlitchFilter.dat with a custom command
  [72/885] Generating semiwrap/DigitalSource.dat with a custom command
  [73/885] Generating semiwrap/DigitalInput.dat with a custom command
  [74/885] Generating semiwrap/CompressorConfigType.cpp with a custom command
  [75/885] Generating semiwrap/DataLogManager.cpp with a custom command
  [76/885] Generating semiwrap/DSControlWord.cpp with a custom command
  [77/885] Generating semiwrap/DigitalGlitchFilter.cpp with a custom command
  [78/885] Generating semiwrap/DigitalInput.cpp with a custom command
  [79/885] Generating semiwrap/DigitalSource.cpp with a custom command
  [80/885] Generating semiwrap/AddressableLED.dat with a custom command
  WARNING: some items not in /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/semiwrap/AddressableLED.yml for /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/AddressableLED.h
  classes:
    frc::AddressableLED:
      enums:
        ColorOrder:
      methods:
        SetColorOrder:

  [81/885] Generating semiwrap/AddressableLED.cpp with a custom command
  [82/885] Generating semiwrap/I2C.dat with a custom command
  [83/885] Generating semiwrap/Compressor.dat with a custom command
  [84/885] Generating semiwrap/DigitalOutput.dat with a custom command
  [85/885] Generating semiwrap/Errors.dat with a custom command
  [86/885] Generating semiwrap/DutyCycle.dat with a custom command
  [87/885] Generating semiwrap/Counter.dat with a custom command
  [88/885] Generating semiwrap/DriverStation.dat with a custom command
  [89/885] Generating semiwrap/DoubleSolenoid.dat with a custom command
  [90/885] Generating semiwrap/I2C.cpp with a custom command
  [91/885] Generating semiwrap/DutyCycleEncoder.dat with a custom command
  [92/885] Generating semiwrap/Errors.cpp with a custom command
  [93/885] Generating semiwrap/Compressor.cpp with a custom command
  [94/885] Generating semiwrap/DutyCycle.cpp with a custom command
  [95/885] Generating semiwrap/DigitalOutput.cpp with a custom command
  [96/885] Generating semiwrap/Counter.cpp with a custom command
  [97/885] Generating semiwrap/DoubleSolenoid.cpp with a custom command
  [98/885] Generating semiwrap/DriverStation.cpp with a custom command
  [99/885] Generating semiwrap/Encoder.dat with a custom command
  [100/885] Generating semiwrap/DutyCycleEncoder.cpp with a custom command
  [101/885] Generating semiwrap/Joystick.dat with a custom command
  [102/885] Generating semiwrap/MotorSafety.dat with a custom command
  [103/885] Generating semiwrap/Encoder.cpp with a custom command
  [104/885] Generating semiwrap/PS4Controller.dat with a custom command
  [105/885] Generating semiwrap/PS5Controller.dat with a custom command
  [106/885] Generating semiwrap/PneumaticsModuleType.dat with a custom command
  [107/885] Generating semiwrap/Joystick.cpp with a custom command
  [108/885] Generating semiwrap/MotorSafety.cpp with a custom command
  [109/885] Generating semiwrap/Preferences.dat with a custom command
  [110/885] Generating semiwrap/PS4Controller.cpp with a custom command
  [111/885] Generating semiwrap/PowerDistribution.dat with a custom command
  [112/885] Generating semiwrap/PneumaticsModuleType.cpp with a custom command
  [113/885] Generating semiwrap/PS5Controller.cpp with a custom command
  [114/885] Generating semiwrap/Preferences.cpp with a custom command
  [115/885] Generating semiwrap/PowerDistribution.cpp with a custom command
  [116/885] Generating semiwrap/RobotState.dat with a custom command
  [117/885] Generating semiwrap/RuntimeType.dat with a custom command
  [118/885] Generating semiwrap/PWM.dat with a custom command
  [119/885] Generating semiwrap/PneumaticsBase.dat with a custom command
  [120/885] Generating semiwrap/SensorUtil.dat with a custom command
  [121/885] Generating semiwrap/RuntimeType.cpp with a custom command
  [122/885] Generating semiwrap/PWM.cpp with a custom command
  [123/885] Generating semiwrap/RobotState.cpp with a custom command
  [124/885] Generating semiwrap/LEDPattern.dat with a custom command
  WARNING: some items not in /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/semiwrap/LEDPattern.yml for /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/LEDPattern.h
  classes:
    frc::LEDPattern:
      methods:
        ApplyTo:
          overloads:
            LEDReader, std::function<void (int, frc::Color)> [const]:
            std::span<frc::AddressableLED::LEDData>, std::function<void (int, frc::Color)> [const]:
        MapIndex:

  [125/885] Generating semiwrap/PneumaticsBase.cpp with a custom command
  [126/885] Generating semiwrap/SensorUtil.cpp with a custom command
  [127/885] Generating semiwrap/PneumaticsControlModule.dat with a custom command
  [128/885] Generating semiwrap/Relay.dat with a custom command
  [129/885] Generating semiwrap/RobotController.dat with a custom command
  [130/885] Generating semiwrap/PneumaticHub.dat with a custom command
  [131/885] Generating semiwrap/LEDPattern.cpp with a custom command
  [132/885] Generating semiwrap/PneumaticsControlModule.cpp with a custom command
  [133/885] Generating semiwrap/RobotController.cpp with a custom command
  [134/885] Generating semiwrap/Relay.cpp with a custom command
  [135/885] Generating semiwrap/SPI.dat with a custom command
  [136/885] Generating semiwrap/PneumaticHub.cpp with a custom command
  [137/885] Generating semiwrap/SerialPort.dat with a custom command
  [138/885] Generating semiwrap/IterativeRobotBase.dat with a custom command
  [139/885] Generating semiwrap/StadiaController.dat with a custom command
  [140/885] Generating semiwrap/SPI.cpp with a custom command
  [141/885] Generating semiwrap/Threads.dat with a custom command
  [142/885] Generating semiwrap/SerialPort.cpp with a custom command
  [143/885] Generating semiwrap/StadiaController.cpp with a custom command
  [144/885] Generating semiwrap/IterativeRobotBase.cpp with a custom command
  [145/885] Generating semiwrap/Threads.cpp with a custom command
  [146/885] Generating semiwrap/Tracer.dat with a custom command
  [147/885] Generating semiwrap/Servo.dat with a custom command
  [148/885] Generating semiwrap/Filesystem.dat with a custom command
  ../../../../../../../../../../../Library/Frameworks/Python.framework/Versions/3.13/include/python3.13/pyport.h:5 error: "<limits.h> header must define UCHAR_MAX"
  ../../../../../../../../../../../Library/Frameworks/Python.framework/Versions/3.13/include/python3.13/pyport.h:8 error: "Python's source code assumes C's unsigned char is an 8-bit type"
  ../../../../../../../../../../../Library/Frameworks/Python.framework/Versions/3.13/include/python3.13/cpython/pyatomic.h:543 error: "no available pyatomic implementation for this platform/compiler"
  ../../../../.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/conduit/pybind11_platform_abi_id.h:29 error: "Unknown PYBIND11_COMPILER_TYPE: PLEASE REVISE THIS CODE."
  ../../../../.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/conduit/pybind11_platform_abi_id.h:75 error: "Unknown platform or compiler: PLEASE REVISE THIS CODE."
  [149/885] Generating semiwrap/SharpIR.dat with a custom command
  [150/885] Generating semiwrap/RobotBase.dat with a custom command
  [151/885] Generating semiwrap/Tracer.cpp with a custom command
  [152/885] Generating semiwrap/Solenoid.dat with a custom command
  [153/885] Generating semiwrap/DriverStationModeThread.dat with a custom command
  [154/885] Generating semiwrap/XboxController.dat with a custom command
  [155/885] Generating semiwrap/Servo.cpp with a custom command
  [156/885] Generating semiwrap/SynchronousInterrupt.dat with a custom command
  [157/885] Generating semiwrap/Filesystem.cpp with a custom command
  [158/885] Generating semiwrap/SharpIR.cpp with a custom command
  [159/885] Generating semiwrap/Solenoid.cpp with a custom command
  [160/885] Generating semiwrap/RobotBase.cpp with a custom command
  [161/885] Generating semiwrap/Timer.dat with a custom command
  [162/885] Generating semiwrap/LiveWindow.dat with a custom command
  [163/885] Generating semiwrap/XboxController.cpp with a custom command
  [164/885] Generating semiwrap/DriverStationModeThread.cpp with a custom command
  [165/885] Generating semiwrap/SynchronousInterrupt.cpp with a custom command
  [166/885] Generating semiwrap/LiveWindow.cpp with a custom command
  [167/885] Generating semiwrap/Timer.cpp with a custom command
  [168/885] Generating semiwrap/Watchdog.dat with a custom command
  [169/885] Generating semiwrap/Ultrasonic.dat with a custom command
  [170/885] Generating semiwrap/Notifier.dat with a custom command
  ../../../../../../../../../../../Library/Frameworks/Python.framework/Versions/3.13/include/python3.13/pyport.h:5 error: "<limits.h> header must define UCHAR_MAX"
  ../../../../../../../../../../../Library/Frameworks/Python.framework/Versions/3.13/include/python3.13/pyport.h:8 error: "Python's source code assumes C's unsigned char is an 8-bit type"
  ../../../../../../../../../../../Library/Frameworks/Python.framework/Versions/3.13/include/python3.13/cpython/pyatomic.h:543 error: "no available pyatomic implementation for this platform/compiler"
  ../../../../.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/conduit/pybind11_platform_abi_id.h:29 error: "Unknown PYBIND11_COMPILER_TYPE: PLEASE REVISE THIS CODE."
  ../../../../.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/conduit/pybind11_platform_abi_id.h:75 error: "Unknown platform or compiler: PLEASE REVISE THIS CODE."
  [171/885] Generating semiwrap/Watchdog.cpp with a custom command
  [172/885] Generating semiwrap/Ultrasonic.cpp with a custom command
  [173/885] Generating semiwrap/DMC60.dat with a custom command
  [174/885] Generating semiwrap/Notifier.cpp with a custom command
  [175/885] Generating semiwrap/DMC60.cpp with a custom command
  [176/885] Generating semiwrap/Jaguar.dat with a custom command
  [177/885] Generating semiwrap/PWMSparkFlex.dat with a custom command
  [178/885] Generating semiwrap/MotorControllerGroup.dat with a custom command
  [179/885] Generating semiwrap/PWMMotorController.dat with a custom command
  [180/885] Generating semiwrap/PWMTalonFX.dat with a custom command
  [181/885] Generating semiwrap/PWMSparkMax.dat with a custom command
  [182/885] Generating semiwrap/NidecBrushless.dat with a custom command
  [183/885] Generating semiwrap/PWMTalonSRX.dat with a custom command
  [184/885] Generating semiwrap/Jaguar.cpp with a custom command
  [185/885] Generating semiwrap/PWMSparkFlex.cpp with a custom command
  [186/885] Generating semiwrap/PWMVenom.dat with a custom command
  [187/885] Generating semiwrap/MotorControllerGroup.cpp with a custom command
  [188/885] Generating semiwrap/PWMTalonFX.cpp with a custom command
  [189/885] Generating semiwrap/PWMSparkMax.cpp with a custom command
  [190/885] Generating semiwrap/PWMMotorController.cpp with a custom command
  [191/885] Generating semiwrap/NidecBrushless.cpp with a custom command
  [192/885] Generating semiwrap/PWMTalonSRX.cpp with a custom command
  [193/885] Generating semiwrap/PWMVictorSPX.dat with a custom command
  [194/885] Generating semiwrap/SD540.dat with a custom command
  [195/885] Generating semiwrap/PWMVenom.cpp with a custom command
  [196/885] Generating semiwrap/PWMVictorSPX.cpp with a custom command
  [197/885] Generating semiwrap/TimedRobot.dat with a custom command
  [198/885] Generating semiwrap/SD540.cpp with a custom command
  [199/885] Generating semiwrap/TimesliceRobot.dat with a custom command
  [200/885] Generating semiwrap/Spark.dat with a custom command
  [201/885] Generating semiwrap/Talon.dat with a custom command
  [202/885] Generating semiwrap/Victor.dat with a custom command
  [203/885] Generating semiwrap/TimesliceRobot.cpp with a custom command
  [204/885] Generating semiwrap/TimedRobot.cpp with a custom command
  [205/885] Generating semiwrap/SendableChooserBase.dat with a custom command
  [206/885] Generating semiwrap/Spark.cpp with a custom command
  [207/885] Generating semiwrap/Talon.cpp with a custom command
  [208/885] Generating semiwrap/Victor.cpp with a custom command
  [209/885] Generating semiwrap/SendableChooserBase.cpp with a custom command
  [210/885] Generating semiwrap/SendableChooser.dat with a custom command
  [211/885] Generating semiwrap/SmartDashboard.dat with a custom command
  [212/885] Generating semiwrap/VictorSP.dat with a custom command
  [213/885] Generating semiwrap/EdgeConfiguration.dat with a custom command
  [214/885] Generating semiwrap/ExternalDirectionCounter.dat with a custom command
  [215/885] Generating semiwrap/SendableChooser.cpp with a custom command
  [216/885] Generating semiwrap/SendableChooser_tmpl1.cpp with a custom command
  [217/885] Generating semiwrap/VictorSP.cpp with a custom command
  [218/885] Generating semiwrap/SendableChooser_tmpl.hpp with a custom command
  [219/885] Generating semiwrap/SmartDashboard.cpp with a custom command
  [220/885] Generating semiwrap/ExternalDirectionCounter.cpp with a custom command
  [221/885] Generating semiwrap/EdgeConfiguration.cpp with a custom command
  [222/885] Generating semiwrap/ADXRS450_Gyro.dat with a custom command
  [223/885] Generating semiwrap/AnalogGyro.dat with a custom command
  [224/885] Generating semiwrap/MechanismObject2d.dat with a custom command
  [225/885] Generating semiwrap/UpDownCounter.dat with a custom command
  [226/885] Generating semiwrap/MechanismRoot2d.dat with a custom command
  [227/885] Generating semiwrap/ADXRS450_Gyro.cpp with a custom command
  [228/885] Generating semiwrap/BuiltInLayouts.dat with a custom command
  [229/885] Generating semiwrap/AnalogGyro.cpp with a custom command
  [230/885] Generating semiwrap/MechanismObject2d.cpp with a custom command
  [231/885] Generating semiwrap/MechanismRoot2d.cpp with a custom command
  [232/885] Generating semiwrap/Tachometer.dat with a custom command
  [233/885] Generating semiwrap/UpDownCounter.cpp with a custom command
  [234/885] Generating semiwrap/BuiltInLayouts.cpp with a custom command
  [235/885] Generating semiwrap/Color8Bit.dat with a custom command
  [236/885] Generating semiwrap/BuiltInWidgets.dat with a custom command
  [237/885] Generating semiwrap/semiwrap_init.wpilib.counter._counter.hpp with a custom command
  [238/885] Generating semiwrap/Tachometer.cpp with a custom command
  [239/885] Generating semiwrap/Color.dat with a custom command
  [240/885] Generating semiwrap/SendableBuilderImpl.dat with a custom command
  [241/885] Generating semiwrap/LayoutType.dat with a custom command
  [242/885] Generating semiwrap/BuiltInWidgets.cpp with a custom command
  [243/885] Generating semiwrap/Color8Bit.cpp with a custom command
  [244/885] Generating semiwrap/RobotDriveBase.dat with a custom command
  [245/885] Generating semiwrap/Mechanism2d.dat with a custom command
  [246/885] Generating semiwrap/DifferentialDrive.dat with a custom command
  [247/885] Generating semiwrap/Color.cpp with a custom command
  [248/885] Generating semiwrap/SendableBuilderImpl.cpp with a custom command
  [249/885] Generating semiwrap/RobotDriveBase.cpp with a custom command
  [250/885] Generating semiwrap/LayoutType.cpp with a custom command
  [251/885] Generating semiwrap/DifferentialDrive.cpp with a custom command
  [252/885] Generating semiwrap/Mechanism2d.cpp with a custom command
  [253/885] Generating semiwrap/MechanismLigament2d.dat with a custom command
  [254/885] Generating semiwrap/ShuffleboardEventImportance.dat with a custom command
  [255/885] Generating semiwrap/ShuffleboardRoot.dat with a custom command
  [256/885] Generating semiwrap/MechanismLigament2d.cpp with a custom command
  [257/885] Generating semiwrap/ShuffleboardEventImportance.cpp with a custom command
  [258/885] Generating semiwrap/ShuffleboardRoot.cpp with a custom command
  [259/885] Generating semiwrap/WidgetType.dat with a custom command
  [260/885] Generating semiwrap/SysIdRoutineLog.dat with a custom command
  [261/885] Generating semiwrap/WidgetType.cpp with a custom command
  [262/885] Generating semiwrap/ComplexWidget.dat with a custom command
  [263/885] Generating semiwrap/SysIdRoutineLog.cpp with a custom command
  [264/885] Generating semiwrap/ShuffleboardComponent.dat with a custom command
  [265/885] Generating semiwrap/ComplexWidget.cpp with a custom command
  [266/885] Generating semiwrap/ShuffleboardComponentBase.dat with a custom command
  [267/885] Generating semiwrap/ShuffleboardComponent.cpp with a custom command
  [268/885] Generating semiwrap/ShuffleboardComponent_tmpl2.cpp with a custom command
  [269/885] Generating semiwrap/ShuffleboardComponent_tmpl1.cpp with a custom command
  [270/885] Generating semiwrap/ADXL345Sim.dat with a custom command
  [271/885] Generating semiwrap/ADIS16448_IMUSim.dat with a custom command
  [272/885] Generating semiwrap/ShuffleboardValue.dat with a custom command
  [273/885] Generating semiwrap/ShuffleboardComponent_tmpl3.cpp with a custom command
  [274/885] Generating semiwrap/ShuffleboardComponent_tmpl4.cpp with a custom command
  [275/885] Generating semiwrap/ShuffleboardComponent_tmpl6.cpp with a custom command
  [276/885] Generating semiwrap/ShuffleboardComponent_tmpl5.cpp with a custom command
  [277/885] Generating semiwrap/ShuffleboardWidget.dat with a custom command
  [278/885] Generating semiwrap/ShuffleboardComponent_tmpl7.cpp with a custom command
  [279/885] Generating semiwrap/ShuffleboardComponent_tmpl8.cpp with a custom command
  [280/885] Generating semiwrap/SimpleWidget.dat with a custom command
  [281/885] Generating semiwrap/Shuffleboard.dat with a custom command
  [282/885] Generating semiwrap/SuppliedValueWidget.dat with a custom command
  [283/885] Generating semiwrap/ADIS16470_IMUSim.dat with a custom command
  [284/885] Generating semiwrap/ShuffleboardContainer.dat with a custom command
  [285/885] Generating semiwrap/ShuffleboardComponent_tmpl12.cpp with a custom command
  [286/885] Generating semiwrap/ShuffleboardLayout.dat with a custom command
  [287/885] Generating semiwrap/ShuffleboardComponent_tmpl9.cpp with a custom command
  [288/885] Generating semiwrap/ShuffleboardComponent_tmpl11.cpp with a custom command
  [289/885] Generating semiwrap/ShuffleboardComponent_tmpl13.cpp with a custom command
  [290/885] Generating semiwrap/ShuffleboardComponent_tmpl10.cpp with a custom command
  [291/885] Generating semiwrap/ShuffleboardComponent_tmpl14.cpp with a custom command
  [292/885] Generating semiwrap/ShuffleboardInstance.dat with a custom command
  [293/885] Generating semiwrap/ShuffleboardComponent_tmpl.hpp with a custom command
  [294/885] Generating semiwrap/ShuffleboardTab.dat with a custom command
  [295/885] Generating semiwrap/ShuffleboardValue.cpp with a custom command
  [296/885] Generating semiwrap/ShuffleboardWidget.cpp with a custom command
  [297/885] Generating semiwrap/Shuffleboard.cpp with a custom command
  [298/885] Generating semiwrap/ShuffleboardContainer.cpp with a custom command
  [299/885] Generating semiwrap/ShuffleboardWidget_tmpl2.cpp with a custom command
  [300/885] Generating semiwrap/ShuffleboardLayout.cpp with a custom command
  [301/885] Generating semiwrap/ShuffleboardWidget_tmpl3.cpp with a custom command
  [302/885] Generating semiwrap/ShuffleboardWidget_tmpl4.cpp with a custom command
  [303/885] Generating semiwrap/ShuffleboardComponentBase.cpp with a custom command
  [304/885] Generating semiwrap/ShuffleboardWidget_tmpl5.cpp with a custom command
  [305/885] Generating semiwrap/ShuffleboardWidget_tmpl6.cpp with a custom command
  [306/885] Generating semiwrap/ShuffleboardWidget_tmpl1.cpp with a custom command
  [307/885] Generating semiwrap/ShuffleboardInstance.cpp with a custom command
  [308/885] Generating semiwrap/ShuffleboardWidget_tmpl7.cpp with a custom command
  [309/885] Generating semiwrap/ShuffleboardWidget_tmpl8.cpp with a custom command
  [310/885] Generating semiwrap/ShuffleboardTab.cpp with a custom command
  [311/885] Generating semiwrap/ShuffleboardWidget_tmpl12.cpp with a custom command
  [312/885] Generating semiwrap/ShuffleboardWidget_tmpl9.cpp with a custom command
  [313/885] Generating semiwrap/SuppliedValueWidget.cpp with a custom command
  [314/885] Generating semiwrap/ShuffleboardWidget_tmpl10.cpp with a custom command
  [315/885] Generating semiwrap/ShuffleboardWidget_tmpl.hpp with a custom command
  [316/885] Generating semiwrap/ShuffleboardWidget_tmpl11.cpp with a custom command
  [317/885] Generating semiwrap/SimpleWidget.cpp with a custom command
  [318/885] Generating semiwrap/ShuffleboardWidget_tmpl13.cpp with a custom command
  [319/885] Generating semiwrap/SuppliedValueWidget_tmpl3.cpp with a custom command
  [320/885] Generating semiwrap/SuppliedValueWidget_tmpl1.cpp with a custom command
  [321/885] Generating semiwrap/SuppliedValueWidget_tmpl4.cpp with a custom command
  [322/885] Generating semiwrap/SuppliedValueWidget_tmpl2.cpp with a custom command
  [323/885] Generating semiwrap/SuppliedValueWidget_tmpl5.cpp with a custom command
  [324/885] Generating semiwrap/SuppliedValueWidget_tmpl6.cpp with a custom command
  [325/885] Generating semiwrap/SuppliedValueWidget_tmpl11.cpp with a custom command
  [326/885] Generating semiwrap/SuppliedValueWidget_tmpl10.cpp with a custom command
  [327/885] Generating semiwrap/SuppliedValueWidget_tmpl8.cpp with a custom command
  [328/885] Generating semiwrap/SuppliedValueWidget_tmpl9.cpp with a custom command
  [329/885] Generating semiwrap/SuppliedValueWidget_tmpl.hpp with a custom command
  [330/885] Generating semiwrap/ADIS16448_IMUSim.cpp with a custom command
  [331/885] Generating semiwrap/ADIS16470_IMUSim.cpp with a custom command
  [332/885] Generating semiwrap/ADXL345Sim.cpp with a custom command
  [333/885] Generating semiwrap/semiwrap_init.wpilib.shuffleboard._shuffleboard.hpp with a custom command
  [334/885] Generating semiwrap/SuppliedValueWidget_tmpl7.cpp with a custom command
  [335/885] Generating semiwrap/ADXL362Sim.dat with a custom command
  [336/885] Generating semiwrap/AddressableLEDSim.dat with a custom command
  [337/885] Generating semiwrap/AnalogGyroSim.dat with a custom command
  [338/885] Generating semiwrap/CallbackStore.dat with a custom command
  [339/885] Generating semiwrap/ADXL362Sim.cpp with a custom command
  [340/885] Generating semiwrap/AnalogTriggerSim.dat with a custom command
  [341/885] Generating semiwrap/AnalogOutputSim.dat with a custom command
  [342/885] Generating semiwrap/BuiltInAccelerometerSim.dat with a custom command
  [343/885] Generating semiwrap/AddressableLEDSim.cpp with a custom command
  [344/885] Generating semiwrap/DIOSim.dat with a custom command
  [345/885] Generating semiwrap/AnalogInputSim.dat with a custom command
  [346/885] Generating semiwrap/AnalogGyroSim.cpp with a custom command
  [347/885] Generating semiwrap/AnalogTriggerSim.cpp with a custom command
  [348/885] Generating semiwrap/CallbackStore.cpp with a custom command
  [349/885] Generating semiwrap/AnalogOutputSim.cpp with a custom command
  [350/885] Generating semiwrap/DIOSim.cpp with a custom command
  [351/885] Generating semiwrap/BuiltInAccelerometerSim.cpp with a custom command
  [352/885] Generating semiwrap/AnalogInputSim.cpp with a custom command
  [353/885] Generating semiwrap/DigitalPWMSim.dat with a custom command
  [354/885] Generating semiwrap/DutyCycleSim.dat with a custom command
  [355/885] Generating semiwrap/DigitalPWMSim.cpp with a custom command
  [356/885] Generating semiwrap/EncoderSim.dat with a custom command
  [357/885] Generating semiwrap/BatterySim.dat with a custom command
  [358/885] Generating semiwrap/CTREPCMSim.dat with a custom command
  [359/885] Generating semiwrap/GenericHIDSim.dat with a custom command
  [360/885] Generating semiwrap/DutyCycleSim.cpp with a custom command
  [361/885] Generating semiwrap/EncoderSim.cpp with a custom command
  [362/885] Generating semiwrap/BatterySim.cpp with a custom command
  [363/885] Generating semiwrap/CTREPCMSim.cpp with a custom command
  [364/885] Generating semiwrap/GenericHIDSim.cpp with a custom command
  [365/885] Generating semiwrap/JoystickSim.dat with a custom command
  [366/885] Generating semiwrap/DutyCycleEncoderSim.dat with a custom command
  [367/885] Generating semiwrap/PS4ControllerSim.dat with a custom command
  [368/885] Generating semiwrap/DoubleSolenoidSim.dat with a custom command
  [369/885] Generating semiwrap/JoystickSim.cpp with a custom command
  [370/885] Generating semiwrap/PWMSim.dat with a custom command
  [371/885] Generating semiwrap/PS5ControllerSim.dat with a custom command
  [372/885] Generating semiwrap/DriverStationSim.dat with a custom command
  [373/885] Generating semiwrap/PS4ControllerSim.cpp with a custom command
  [374/885] Generating semiwrap/DoubleSolenoidSim.cpp with a custom command
  [375/885] Generating semiwrap/DutyCycleEncoderSim.cpp with a custom command
  [376/885] Generating semiwrap/PWMSim.cpp with a custom command
  [377/885] Generating semiwrap/PS5ControllerSim.cpp with a custom command
  [378/885] Generating semiwrap/DriverStationSim.cpp with a custom command
  [379/885] Generating semiwrap/PowerDistributionSim.dat with a custom command
  [380/885] Generating semiwrap/RelaySim.dat with a custom command
  [381/885] Generating semiwrap/SPIAccelerometerSim.dat with a custom command
  [382/885] Generating semiwrap/PneumaticsBaseSim.dat with a custom command
  [383/885] Generating semiwrap/PowerDistributionSim.cpp with a custom command
  [384/885] Generating semiwrap/RelaySim.cpp with a custom command
  [385/885] Generating semiwrap/SPIAccelerometerSim.cpp with a custom command
  [386/885] Generating semiwrap/PneumaticsBaseSim.cpp with a custom command
  [387/885] Generating semiwrap/SimDeviceSim.dat with a custom command
  [388/885] Generating semiwrap/REVPHSim.dat with a custom command
  [389/885] Generating semiwrap/SharpIRSim.dat with a custom command
  [390/885] Generating semiwrap/RoboRioSim.dat with a custom command
  [391/885] Generating semiwrap/SimDeviceSim.cpp with a custom command
  [392/885] Generating semiwrap/REVPHSim.cpp with a custom command
  [393/885] Generating semiwrap/SharpIRSim.cpp with a custom command
  [394/885] Generating semiwrap/RoboRioSim.cpp with a custom command
  [395/885] Generating semiwrap/StadiaControllerSim.dat with a custom command
  [396/885] Generating semiwrap/trampolines/frc__BooleanEvent.hpp with a custom command
  [397/885] Generating semiwrap/SimHooks.dat with a custom command
  [398/885] Generating semiwrap/FieldObject2d.dat with a custom command
  [399/885] Generating semiwrap/XboxControllerSim.dat with a custom command
  [400/885] Generating semiwrap/SolenoidSim.dat with a custom command
  [401/885] Generating semiwrap/StadiaControllerSim.cpp with a custom command
  [402/885] Generating semiwrap/Field2d.dat with a custom command
  [403/885] Generating semiwrap/trampolines/frc__EventLoop.hpp with a custom command
  [404/885] Generating semiwrap/SimHooks.cpp with a custom command
  [405/885] Generating semiwrap/SendableChooserSim.dat with a custom command
  [406/885] Generating semiwrap/FieldObject2d.cpp with a custom command
  [407/885] Generating semiwrap/Field2d.cpp with a custom command
  [408/885] Generating semiwrap/XboxControllerSim.cpp with a custom command
  [409/885] Generating semiwrap/SolenoidSim.cpp with a custom command
  [410/885] Generating semiwrap/trampolines/frc__NetworkBooleanEvent.hpp with a custom command
  [411/885] Generating semiwrap/trampolines/frc__CounterBase.hpp with a custom command
  [412/885] Generating semiwrap/SendableChooserSim.cpp with a custom command
  [413/885] Generating semiwrap/semiwrap_init.wpilib._wpilib.hpp with a custom command
  [414/885] Generating semiwrap/trampolines/frc__GenericHID.hpp with a custom command
  [415/885] Generating semiwrap/trampolines/frc__MotorController.hpp with a custom command
  [416/885] Generating semiwrap/trampolines/frc__ADIS16470_IMU.hpp with a custom command
  [417/885] Generating semiwrap/trampolines/frc__ADIS16448_IMU.hpp with a custom command
  [418/885] Generating semiwrap/trampolines/frc__ADXL345_I2C__AllAxes.hpp with a custom command
  [419/885] Generating semiwrap/trampolines/frc__ADXL345_I2C.hpp with a custom command
  [420/885] Generating semiwrap/trampolines/frc__ADXL345_SPI__AllAxes.hpp with a custom command
  [421/885] Generating semiwrap/UltrasonicSim.dat with a custom command
  [422/885] Generating semiwrap/trampolines/frc__ADXL345_SPI.hpp with a custom command
  [423/885] Generating semiwrap/trampolines/frc__AddressableLED.hpp with a custom command
  [424/885] Generating semiwrap/trampolines/frc__ADXL362.hpp with a custom command
  [425/885] Generating semiwrap/trampolines/frc__ADXL362__AllAxes.hpp with a custom command
  [426/885] Generating semiwrap/trampolines/frc__ADXRS450_Gyro.hpp with a custom command
  [427/885] Generating semiwrap/trampolines/frc__AddressableLED__LEDData.hpp with a custom command
  [428/885] Generating semiwrap/trampolines/frc__AnalogAccelerometer.hpp with a custom command
  [429/885] Generating semiwrap/trampolines/frc__Alert.hpp with a custom command
  [430/885] Generating semiwrap/UltrasonicSim.cpp with a custom command
  [431/885] Generating semiwrap/trampolines/frc__AnalogEncoder.hpp with a custom command
  [432/885] Generating semiwrap/MecanumDrive.dat with a custom command
  [433/885] Generating semiwrap/trampolines/frc__AnalogGyro.hpp with a custom command
  [434/885] Generating semiwrap/trampolines/frc__AnalogOutput.hpp with a custom command
  [435/885] Generating semiwrap/trampolines/frc__AnalogPotentiometer.hpp with a custom command
  [436/885] Generating semiwrap/trampolines/frc__AnalogInput.hpp with a custom command
  [437/885] Generating semiwrap/trampolines/frc__AnalogTrigger.hpp with a custom command
  [438/885] Generating semiwrap/trampolines/frc__AnalogTriggerOutput.hpp with a custom command
  [439/885] Generating semiwrap/trampolines/frc__CANData.hpp with a custom command
  [440/885] Generating semiwrap/trampolines/frc__BuiltInAccelerometer.hpp with a custom command
  [441/885] Generating semiwrap/trampolines/frc__CAN.hpp with a custom command
  [442/885] Generating semiwrap/MecanumDrive.cpp with a custom command
  [443/885] Generating semiwrap/semiwrap_init.wpilib.drive._drive.hpp with a custom command
  [444/885] Generating semiwrap/trampolines/frc__Compressor.hpp with a custom command
  [445/885] Generating semiwrap/trampolines/frc__DataLogManager.hpp with a custom command
  [446/885] Generating semiwrap/trampolines/frc__Counter.hpp with a custom command
  [447/885] Generating semiwrap/trampolines/frc__DSControlWord.hpp with a custom command
  [448/885] Generating semiwrap/trampolines/frc__DigitalGlitchFilter.hpp with a custom command
  [449/885] Generating semiwrap/trampolines/frc__DoubleSolenoid.hpp with a custom command
  [450/885] Generating semiwrap/trampolines/frc__DigitalInput.hpp with a custom command
  [451/885] Generating semiwrap/trampolines/frc__DigitalOutput.hpp with a custom command
  [452/885] Generating semiwrap/trampolines/frc__DigitalSource.hpp with a custom command
  [453/885] Generating semiwrap/trampolines/frc__DutyCycle.hpp with a custom command
  [454/885] Generating semiwrap/trampolines/frc__DriverStation.hpp with a custom command
  [455/885] Generating semiwrap/trampolines/frc__Encoder.hpp with a custom command
  [456/885] Generating semiwrap/trampolines/frc__I2C.hpp with a custom command
  [457/885] Generating semiwrap/trampolines/frc__DutyCycleEncoder.hpp with a custom command
  [458/885] Generating semiwrap/trampolines/frc__IterativeRobotBase.hpp with a custom command
  [459/885] Generating semiwrap/trampolines/frc__LEDPattern.hpp with a custom command
  [460/885] Generating semiwrap/trampolines/frc__PS4Controller.hpp with a custom command
  [461/885] Generating semiwrap/trampolines/frc__PS4Controller__Button.hpp with a custom command
  [462/885] Generating semiwrap/trampolines/frc__LEDPattern__LEDReader.hpp with a custom command
  [463/885] Generating semiwrap/trampolines/frc__Joystick.hpp with a custom command
  [464/885] Generating semiwrap/trampolines/frc__PyNotifier.hpp with a custom command
  [465/885] Generating semiwrap/trampolines/frc__MotorSafety.hpp with a custom command
  [466/885] Generating semiwrap/trampolines/frc__PS4Controller__Axis.hpp with a custom command
  [467/885] Generating semiwrap/trampolines/frc__PS5Controller.hpp with a custom command
  [468/885] Generating semiwrap/trampolines/frc__PS5Controller__Button.hpp with a custom command
  [469/885] Generating semiwrap/trampolines/frc__PneumaticHub.hpp with a custom command
  [470/885] Generating semiwrap/trampolines/frc__PneumaticHub__Version.hpp with a custom command
  [471/885] Generating semiwrap/trampolines/frc__PneumaticHub__Faults.hpp with a custom command
  [472/885] Generating semiwrap/trampolines/frc__PneumaticHub__StickyFaults.hpp with a custom command
  [473/885] Generating semiwrap/trampolines/frc__PWM.hpp with a custom command
  [474/885] Generating semiwrap/trampolines/frc__PS5Controller__Axis.hpp with a custom command
  [475/885] Generating semiwrap/trampolines/frc__PneumaticsBase.hpp with a custom command
  [476/885] Generating semiwrap/trampolines/frc__PowerDistribution.hpp with a custom command
  [477/885] Generating semiwrap/trampolines/frc__PneumaticsControlModule.hpp with a custom command
  [478/885] Generating semiwrap/trampolines/frc__PowerDistribution__Faults.hpp with a custom command
  [479/885] Generating semiwrap/trampolines/frc__PowerDistribution__Version.hpp with a custom command
  [480/885] Generating semiwrap/trampolines/frc__PowerDistribution__StickyFaults.hpp with a custom command
  [481/885] Generating semiwrap/trampolines/frc__CANStatus.hpp with a custom command
  [482/885] Generating semiwrap/trampolines/frc__Preferences.hpp with a custom command
  [483/885] Generating semiwrap/trampolines/frc__Relay.hpp with a custom command
  [484/885] Generating semiwrap/trampolines/frc__RobotBase.hpp with a custom command
  [485/885] Generating semiwrap/trampolines/frc__RobotController.hpp with a custom command
  [486/885] Generating semiwrap/trampolines/frc__SPI.hpp with a custom command
  [487/885] Generating semiwrap/trampolines/frc__SensorUtil.hpp with a custom command
  [488/885] Generating semiwrap/trampolines/frc__SharpIR.hpp with a custom command
  [489/885] Generating semiwrap/trampolines/frc__SerialPort.hpp with a custom command
  [490/885] Generating semiwrap/trampolines/frc__RobotState.hpp with a custom command
  [491/885] Generating semiwrap/trampolines/frc__Servo.hpp with a custom command
  [492/885] Generating semiwrap/trampolines/frc__Solenoid.hpp with a custom command
  [493/885] Generating semiwrap/trampolines/frc__StadiaController__Button.hpp with a custom command
  [494/885] Generating semiwrap/trampolines/frc__StadiaController.hpp with a custom command
  [495/885] Generating semiwrap/trampolines/frc__StadiaController__Axis.hpp with a custom command
  [496/885] Generating semiwrap/trampolines/frc__Ultrasonic.hpp with a custom command
  [497/885] Generating semiwrap/trampolines/frc__SynchronousInterrupt.hpp with a custom command
  [498/885] Generating semiwrap/trampolines/frc__TimedRobot.hpp with a custom command
  [499/885] Generating semiwrap/trampolines/frc__Tracer.hpp with a custom command
  [500/885] Generating semiwrap/trampolines/frc__Timer.hpp with a custom command
  [501/885] Generating semiwrap/trampolines/frc__TimesliceRobot.hpp with a custom command
  [502/885] Generating semiwrap/trampolines/frc__Watchdog.hpp with a custom command
  [503/885] Generating semiwrap/trampolines/frc__XboxController.hpp with a custom command
  [504/885] Generating semiwrap/trampolines/frc__XboxController__Button.hpp with a custom command
  [505/885] Generating semiwrap/trampolines/frc__XboxController__Axis.hpp with a custom command
  [506/885] Generating semiwrap/trampolines/frc__internal__DriverStationModeThread.hpp with a custom command
  [507/885] Generating semiwrap/trampolines/frc__DMC60.hpp with a custom command
  [508/885] Generating semiwrap/trampolines/frc__PyMotorControllerGroup.hpp with a custom command
  [509/885] Generating semiwrap/trampolines/frc__LiveWindow.hpp with a custom command
  [510/885] Generating semiwrap/trampolines/frc__Jaguar.hpp with a custom command
  [511/885] Generating semiwrap/trampolines/frc__NidecBrushless.hpp with a custom command
  [512/885] Generating semiwrap/trampolines/frc__PWMSparkFlex.hpp with a custom command
  [513/885] Generating semiwrap/trampolines/frc__PWMMotorController.hpp with a custom command
  [514/885] Generating semiwrap/trampolines/frc__PWMSparkMax.hpp with a custom command
  [515/885] Generating semiwrap/trampolines/frc__PWMTalonFX.hpp with a custom command
  [516/885] Generating semiwrap/trampolines/frc__PWMVenom.hpp with a custom command
  [517/885] Generating semiwrap/trampolines/frc__PWMTalonSRX.hpp with a custom command
  [518/885] Generating semiwrap/trampolines/frc__Spark.hpp with a custom command
  [519/885] Generating semiwrap/trampolines/frc__PWMVictorSPX.hpp with a custom command
  [520/885] Generating semiwrap/trampolines/frc__SD540.hpp with a custom command
  [521/885] Generating semiwrap/trampolines/frc__Victor.hpp with a custom command
  [522/885] Generating semiwrap/trampolines/frc__VictorSP.hpp with a custom command
  [523/885] Generating semiwrap/trampolines/frc__Talon.hpp with a custom command
  [524/885] Generating semiwrap/trampolines/frc__Field2d.hpp with a custom command
  [525/885] Generating semiwrap/trampolines/frc__MechanismLigament2d.hpp with a custom command
  [526/885] Generating semiwrap/trampolines/frc__FieldObject2d.hpp with a custom command
  [527/885] Generating semiwrap/trampolines/frc__MechanismObject2d.hpp with a custom command
  [528/885] Generating semiwrap/trampolines/frc__MechanismRoot2d.hpp with a custom command
  [529/885] Generating semiwrap/trampolines/frc__SendableBuilderImpl.hpp with a custom command
  [530/885] Generating semiwrap/trampolines/frc__SendableChooser.hpp with a custom command
  [531/885] Generating semiwrap/trampolines/frc__Mechanism2d.hpp with a custom command
  [532/885] Generating semiwrap/trampolines/frc__SendableChooserBase.hpp with a custom command
  [533/885] Generating semiwrap/trampolines/frc__sysid__SysIdRoutineLog.hpp with a custom command
  [534/885] Generating semiwrap/trampolines/frc__SmartDashboard.hpp with a custom command
  [535/885] Generating semiwrap/trampolines/frc__Color.hpp with a custom command
  [536/885] Generating semiwrap/trampolines/frc__ExternalDirectionCounter.hpp with a custom command
  [537/885] Generating semiwrap/trampolines/frc__Color8Bit.hpp with a custom command
  [538/885] Generating semiwrap/trampolines/frc__sysid__SysIdRoutineLog__MotorLog.hpp with a custom command
  [539/885] Generating semiwrap/trampolines/frc__DifferentialDrive.hpp with a custom command
  [540/885] Generating semiwrap/trampolines/frc__Tachometer.hpp with a custom command
  [541/885] Generating semiwrap/trampolines/frc__UpDownCounter.hpp with a custom command
  [542/885] Generating semiwrap/trampolines/frc__DifferentialDrive__WheelSpeeds.hpp with a custom command
  [543/885] Generating semiwrap/trampolines/frc__MecanumDrive.hpp with a custom command
  [544/885] Generating semiwrap/trampolines/frc__Shuffleboard.hpp with a custom command
  [545/885] Generating semiwrap/trampolines/frc__LayoutType.hpp with a custom command
  [546/885] Generating semiwrap/trampolines/frc__ComplexWidget.hpp with a custom command
  [547/885] Generating semiwrap/trampolines/frc__MecanumDrive__WheelSpeeds.hpp with a custom command
  [548/885] Generating semiwrap/trampolines/frc__ShuffleboardContainer.hpp with a custom command
  [549/885] Generating semiwrap/trampolines/frc__ShuffleboardComponent.hpp with a custom command
  [550/885] Generating semiwrap/trampolines/frc__RobotDriveBase.hpp with a custom command
  [551/885] Generating semiwrap/trampolines/frc__ShuffleboardComponentBase.hpp with a custom command
  [552/885] Generating semiwrap/trampolines/frc__detail__ShuffleboardInstance.hpp with a custom command
  [553/885] Generating semiwrap/trampolines/frc__ShuffleboardLayout.hpp with a custom command
  [554/885] Generating semiwrap/trampolines/frc__ShuffleboardWidget.hpp with a custom command
  [555/885] Generating semiwrap/trampolines/frc__WidgetType.hpp with a custom command
  [556/885] Generating semiwrap/trampolines/frc__ShuffleboardTab.hpp with a custom command
  [557/885] Generating semiwrap/trampolines/frc__SimpleWidget.hpp with a custom command
  [558/885] Generating semiwrap/trampolines/frc__sim__ADIS16448_IMUSim.hpp with a custom command
  [559/885] Generating semiwrap/trampolines/frc__ShuffleboardRoot.hpp with a custom command
  [560/885] Generating semiwrap/trampolines/frc__ShuffleboardValue.hpp with a custom command
  [561/885] Generating semiwrap/trampolines/frc__SuppliedValueWidget.hpp with a custom command
  [562/885] Generating semiwrap/trampolines/frc__sim__ADIS16470_IMUSim.hpp with a custom command
  [563/885] Generating semiwrap/trampolines/frc__sim__ADXL345Sim.hpp with a custom command
  [564/885] Generating semiwrap/trampolines/frc__sim__ADXL362Sim.hpp with a custom command
  [565/885] Generating semiwrap/trampolines/frc__sim__AnalogGyroSim.hpp with a custom command
  [566/885] Generating semiwrap/trampolines/frc__sim__AnalogOutputSim.hpp with a custom command
  [567/885] Generating semiwrap/trampolines/frc__sim__AddressableLEDSim.hpp with a custom command
  [568/885] Generating semiwrap/trampolines/frc__sim__AnalogInputSim.hpp with a custom command
  [569/885] Generating semiwrap/trampolines/frc__sim__CTREPCMSim.hpp with a custom command
  [570/885] Generating semiwrap/trampolines/frc__sim__BuiltInAccelerometerSim.hpp with a custom command
  [571/885] Generating semiwrap/trampolines/frc__sim__BatterySim.hpp with a custom command
  [572/885] Generating semiwrap/trampolines/frc__sim__AnalogTriggerSim.hpp with a custom command
  [573/885] Generating semiwrap/trampolines/frc__sim__CallbackStore.hpp with a custom command
  [574/885] Generating semiwrap/trampolines/frc__sim__DigitalPWMSim.hpp with a custom command
  [575/885] Generating semiwrap/trampolines/frc__sim__DIOSim.hpp with a custom command
  [576/885] Generating semiwrap/trampolines/frc__sim__DoubleSolenoidSim.hpp with a custom command
  [577/885] Generating semiwrap/trampolines/frc__sim__DriverStationSim.hpp with a custom command
  [578/885] Generating semiwrap/trampolines/frc__sim__DutyCycleSim.hpp with a custom command
  [579/885] Generating semiwrap/trampolines/frc__sim__GenericHIDSim.hpp with a custom command
  [580/885] Generating semiwrap/trampolines/frc__sim__EncoderSim.hpp with a custom command
  [581/885] Generating semiwrap/trampolines/frc__sim__DutyCycleEncoderSim.hpp with a custom command
  [582/885] Generating semiwrap/trampolines/frc__sim__JoystickSim.hpp with a custom command
  [583/885] Generating semiwrap/trampolines/frc__sim__PS4ControllerSim.hpp with a custom command
  [584/885] Generating semiwrap/trampolines/frc__sim__PS5ControllerSim.hpp with a custom command
  [585/885] Generating semiwrap/trampolines/frc__sim__PWMSim.hpp with a custom command
  [586/885] Generating semiwrap/trampolines/frc__sim__PowerDistributionSim.hpp with a custom command
  [587/885] Generating semiwrap/trampolines/frc__sim__PneumaticsBaseSim.hpp with a custom command
  [588/885] Generating semiwrap/trampolines/frc__sim__SPIAccelerometerSim.hpp with a custom command
  [589/885] Generating semiwrap/ADXRS450_GyroSim.dat with a custom command
  [590/885] Generating semiwrap/trampolines/frc__sim__REVPHSim.hpp with a custom command
  [591/885] Generating semiwrap/trampolines/frc__sim__RelaySim.hpp with a custom command
  [592/885] Generating semiwrap/trampolines/frc__sim__RoboRioSim.hpp with a custom command
  [593/885] Generating semiwrap/trampolines/frc__sim__SendableChooserSim.hpp with a custom command
  [594/885] Compiling C++ object semiwrap/modules/_event.cpython-313-darwin.so.p/meson-generated_.._.._BooleanEvent.cpp.o
  [595/885] Generating semiwrap/trampolines/frc__SharpIRSim.hpp with a custom command
  [596/885] Compiling C++ object semiwrap/modules/_event.cpython-313-darwin.so.p/meson-generated_.._.._EventLoop.cpp.o
  [597/885] Generating semiwrap/trampolines/frc__sim__SolenoidSim.hpp with a custom command
  [598/885] Generating semiwrap/trampolines/frc__sim__SimDeviceSim.hpp with a custom command
  [599/885] Generating semiwrap/trampolines/frc__sim__StadiaControllerSim.hpp with a custom command
  [600/885] Compiling C++ object semiwrap/modules/_event.cpython-313-darwin.so.p/meson-generated_.._.._NetworkBooleanEvent.cpp.o
  [601/885] Generating semiwrap/trampolines/frc__sim__UltrasonicSim.hpp with a custom command
  [602/885] Generating semiwrap/AnalogEncoderSim.dat with a custom command
  [603/885] Compiling C++ object semiwrap/modules/_event.cpython-313-darwin.so.p/.._.._wpilib_event_event.cpp.o
  [604/885] Compiling C++ object semiwrap/modules/_interfaces.cpython-313-darwin.so.p/meson-generated_.._.._CounterBase.cpp.o
  [605/885] Compiling C++ object semiwrap/modules/_interfaces.cpython-313-darwin.so.p/meson-generated_.._.._GenericHID.cpp.o
  [606/885] Compiling C++ object semiwrap/modules/_interfaces.cpython-313-darwin.so.p/.._.._wpilib_interfaces_interfaces.cpp.o
  [607/885] Compiling C++ object semiwrap/modules/_interfaces.cpython-313-darwin.so.p/meson-generated_.._.._MotorController.cpp.o
  [608/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._ADIS16448_IMU.cpp.o
  [609/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._ADXL345_I2C.cpp.o
  In file included from semiwrap/ADXL345_I2C.cpp:7:
  In file included from semiwrap/trampolines/frc__ADXL345_I2C.hpp:13:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/ntcore/trampolines/nt__NTSendable.hpp:13:
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/wpiutil/trampolines/wpi__Sendable.hpp:27:10: warning: 'wpi::PyTrampoline_Sendable<frc::ADXL345_I2C, frc::PyTrampolineCfg_ADXL345_I2C<>>::InitSendable' hides overloaded virtual function [-Woverloaded-virtual]
      void InitSendable(SendableBuilder& builder) override {
           ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/ntcore/trampolines/nt__NTSendable.hpp:36:34: note: in instantiation of template class 'wpi::PyTrampoline_Sendable<frc::ADXL345_I2C, frc::PyTrampolineCfg_ADXL345_I2C<>>' requested here
  struct PyTrampoline_NTSendable : PyTrampolineBase_NTSendable<PyTrampolineBase, PyTrampolineCfg> {
                                   ^
  semiwrap/trampolines/frc__ADXL345_I2C.hpp:37:35: note: in instantiation of template class 'nt::PyTrampoline_NTSendable<frc::ADXL345_I2C, frc::PyTrampolineCfg_ADXL345_I2C<>>' requested here
  struct PyTrampoline_ADXL345_I2C : PyTrampolineBase_ADXL345_I2C<PyTrampolineBase, PyTrampolineCfg> {
                                    ^
  semiwrap/ADXL345_I2C.cpp:19:35: note: in instantiation of template class 'frc::PyTrampoline_ADXL345_I2C<frc::ADXL345_I2C, frc::PyTrampolineCfg_ADXL345_I2C<>>' requested here
    struct ADXL345_I2C_Trampoline : frc::PyTrampoline_ADXL345_I2C<typename frc::ADXL345_I2C, typename frc::PyTrampolineCfg_ADXL345_I2C<>>, py::trampoline_self_life_support {
                                    ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/ADXL345_I2C.h:132:8: note: hidden overloaded virtual function 'frc::ADXL345_I2C::InitSendable' declared here: type mismatch at 1st parameter ('nt::NTSendableBuilder &' vs 'SendableBuilder &')
    void InitSendable(nt::NTSendableBuilder& builder) override;
         ^
  1 warning generated.
  [610/885] Generating semiwrap/trampolines/frc__sim__XboxControllerSim.hpp with a custom command
  [611/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._ADIS16470_IMU.cpp.o
  [612/885] Generating semiwrap/ADXRS450_GyroSim.cpp with a custom command
  [613/885] Generating semiwrap/trampolines/frc__sim__ADXRS450_GyroSim.hpp with a custom command
  [614/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._ADXL345_SPI.cpp.o
  In file included from semiwrap/ADXL345_SPI.cpp:7:
  In file included from semiwrap/trampolines/frc__ADXL345_SPI.hpp:14:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/ntcore/trampolines/nt__NTSendable.hpp:13:
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/wpiutil/trampolines/wpi__Sendable.hpp:27:10: warning: 'wpi::PyTrampoline_Sendable<frc::ADXL345_SPI, frc::PyTrampolineCfg_ADXL345_SPI<>>::InitSendable' hides overloaded virtual function [-Woverloaded-virtual]
      void InitSendable(SendableBuilder& builder) override {
           ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/ntcore/trampolines/nt__NTSendable.hpp:36:34: note: in instantiation of template class 'wpi::PyTrampoline_Sendable<frc::ADXL345_SPI, frc::PyTrampolineCfg_ADXL345_SPI<>>' requested here
  struct PyTrampoline_NTSendable : PyTrampolineBase_NTSendable<PyTrampolineBase, PyTrampolineCfg> {
                                   ^
  semiwrap/trampolines/frc__ADXL345_SPI.hpp:38:35: note: in instantiation of template class 'nt::PyTrampoline_NTSendable<frc::ADXL345_SPI, frc::PyTrampolineCfg_ADXL345_SPI<>>' requested here
  struct PyTrampoline_ADXL345_SPI : PyTrampolineBase_ADXL345_SPI<PyTrampolineBase, PyTrampolineCfg> {
                                    ^
  semiwrap/ADXL345_SPI.cpp:20:35: note: in instantiation of template class 'frc::PyTrampoline_ADXL345_SPI<frc::ADXL345_SPI, frc::PyTrampolineCfg_ADXL345_SPI<>>' requested here
    struct ADXL345_SPI_Trampoline : frc::PyTrampoline_ADXL345_SPI<typename frc::ADXL345_SPI, typename frc::PyTrampolineCfg_ADXL345_SPI<>>, py::trampoline_self_life_support {
                                    ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/ADXL345_SPI.h:122:8: note: hidden overloaded virtual function 'frc::ADXL345_SPI::InitSendable' declared here: type mismatch at 1st parameter ('nt::NTSendableBuilder &' vs 'SendableBuilder &')
    void InitSendable(nt::NTSendableBuilder& builder) override;
         ^
  1 warning generated.
  [615/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._ADXL362.cpp.o
  In file included from semiwrap/ADXL362.cpp:7:
  In file included from semiwrap/trampolines/frc__ADXL362.hpp:14:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/ntcore/trampolines/nt__NTSendable.hpp:13:
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/wpiutil/trampolines/wpi__Sendable.hpp:27:10: warning: 'wpi::PyTrampoline_Sendable<frc::ADXL362, frc::PyTrampolineCfg_ADXL362<>>::InitSendable' hides overloaded virtual function [-Woverloaded-virtual]
      void InitSendable(SendableBuilder& builder) override {
           ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/ntcore/trampolines/nt__NTSendable.hpp:36:34: note: in instantiation of template class 'wpi::PyTrampoline_Sendable<frc::ADXL362, frc::PyTrampolineCfg_ADXL362<>>' requested here
  struct PyTrampoline_NTSendable : PyTrampolineBase_NTSendable<PyTrampolineBase, PyTrampolineCfg> {
                                   ^
  semiwrap/trampolines/frc__ADXL362.hpp:38:31: note: in instantiation of template class 'nt::PyTrampoline_NTSendable<frc::ADXL362, frc::PyTrampolineCfg_ADXL362<>>' requested here
  struct PyTrampoline_ADXL362 : PyTrampolineBase_ADXL362<PyTrampolineBase, PyTrampolineCfg> {
                                ^
  semiwrap/ADXL362.cpp:20:31: note: in instantiation of template class 'frc::PyTrampoline_ADXL362<frc::ADXL362, frc::PyTrampolineCfg_ADXL362<>>' requested here
    struct ADXL362_Trampoline : frc::PyTrampoline_ADXL362<typename frc::ADXL362, typename frc::PyTrampolineCfg_ADXL362<>>, py::trampoline_self_life_support {
                                ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/ADXL362.h:126:8: note: hidden overloaded virtual function 'frc::ADXL362::InitSendable' declared here: type mismatch at 1st parameter ('nt::NTSendableBuilder &' vs 'SendableBuilder &')
    void InitSendable(nt::NTSendableBuilder& builder) override;
         ^
  1 warning generated.
  [616/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._AddressableLED.cpp.o
  [617/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._ADXRS450_Gyro.cpp.o
  [618/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Alert.cpp.o
  [619/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._AnalogAccelerometer.cpp.o
  [620/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._AnalogEncoder.cpp.o
  [621/885] Generating semiwrap/AnalogEncoderSim.cpp with a custom command
  [622/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._AnalogInput.cpp.o
  [623/885] Linking target semiwrap/modules/_event.cpython-313-darwin.so
  [624/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._AnalogGyro.cpp.o
  [625/885] Linking target semiwrap/modules/_interfaces.cpython-313-darwin.so
  [626/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._AnalogOutput.cpp.o
  [627/885] Generating semiwrap/trampolines/frc__sim__AnalogEncoderSim.hpp with a custom command
  [628/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._AnalogPotentiometer.cpp.o
  [629/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._AnalogTrigger.cpp.o
  [630/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._AnalogTriggerType.cpp.o
  [631/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._CompressorConfigType.cpp.o
  [632/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._CAN.cpp.o
  [633/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._DataLogManager.cpp.o
  [634/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._BuiltInAccelerometer.cpp.o
  [635/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Counter.cpp.o
  [636/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._DSControlWord.cpp.o
  [637/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._AnalogTriggerOutput.cpp.o
  [638/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Compressor.cpp.o
  [639/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._DigitalGlitchFilter.cpp.o
  [640/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._DigitalInput.cpp.o
  [641/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._DigitalOutput.cpp.o
  [642/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._DigitalSource.cpp.o
  In file included from semiwrap/DigitalSource.cpp:2:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/include/semiwrap.h:5:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/pybind11.h:12:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/detail/class.h:12:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/attr.h:13:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/detail/common.h:257:
  In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/forward_list:217:
  /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/unique_ptr.h:68:5: warning: delete called on 'frc::DigitalSource' that is abstract but has non-virtual destructor [-Wdelete-abstract-non-virtual-dtor]
      delete __ptr;
      ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/detail/struct_smart_holder.h:96:5: note: in instantiation of member function 'std::default_delete<frc::DigitalSource>::operator()' requested here
      std::default_delete<T>{}(static_cast<T *>(raw_ptr));
      ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/detail/struct_smart_holder.h:109:27: note: in instantiation of function template specialization 'pybindit::memory::builtin_delete_if_destructible<frc::DigitalSource, 0>' requested here
      return guarded_delete(builtin_delete_if_destructible<T>, armed_flag);
                            ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/detail/struct_smart_holder.h:269:19: note: in instantiation of function template specialization 'pybindit::memory::make_guarded_builtin_delete<frc::DigitalSource>' requested here
          auto gd = make_guarded_builtin_delete<T>(true);
                    ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/pybind11.h:2316:71: note: in instantiation of function template specialization 'pybindit::memory::smart_holder::from_raw_ptr_take_ownership<frc::DigitalSource>' requested here
                  new (uninitialized_location) holder_type(holder_type::from_raw_ptr_take_ownership(
                                                                        ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/pybind11.h:1915:32: note: in instantiation of function template specialization 'pybind11::class_<frc::DigitalSource, pybindit::memory::smart_holder, semiwrap_DigitalSource_initializer::DigitalSource_Trampoline>::init_instance<pybindit::memory::smart_holder, 0>' requested here
          record.init_instance = init_instance;
                                 ^
  semiwrap/DigitalSource.cpp:24:5: note: in instantiation of function template specialization 'pybind11::class_<frc::DigitalSource, pybindit::memory::smart_holder, semiwrap_DigitalSource_initializer::DigitalSource_Trampoline>::class_<>' requested here
      cls_DigitalSource(m, "DigitalSource"),
      ^
  1 warning generated.
  [643/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._DoubleSolenoid.cpp.o
  [644/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._DriverStation.cpp.o
  [645/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._I2C.cpp.o
  [646/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._DutyCycle.cpp.o
  [647/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._DutyCycleEncoder.cpp.o
  [648/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Filesystem.cpp.o
  [649/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Encoder.cpp.o
  semiwrap/Encoder.cpp:113:42: warning: 'GetPeriod' is deprecated: Use GetRate() in favor of this method [-Wdeprecated-declarations]
          .def("getPeriod", &frc::Encoder::GetPeriod
                                           ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/Encoder.h:178:5: note: 'GetPeriod' has been explicitly marked deprecated here
    [[deprecated("Use GetRate() in favor of this method")]]
      ^
  semiwrap/Encoder.cpp:128:45: warning: 'SetMaxPeriod' is deprecated: Use SetMinRate() in favor of this method.  This takes unscaled periods and SetMinRate() scales using value from SetDistancePerPulse(). [-Wdeprecated-declarations]
          .def("setMaxPeriod", &frc::Encoder::SetMaxPeriod
                                              ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/Encoder.h:196:5: note: 'SetMaxPeriod' has been explicitly marked deprecated here
    [[deprecated(
      ^
  In file included from semiwrap/Encoder.cpp:9:
  semiwrap/trampolines/frc__Encoder.hpp:81:27: warning: 'GetPeriod' is deprecated: Use GetRate() in favor of this method [-Wdeprecated-declarations]
        return CxxCallBase::GetPeriod();
                            ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/detail/init.h:77:16: note: in instantiation of member function 'frc::PyTrampoline_Encoder<frc::Encoder, frc::PyTrampolineCfg_Encoder<>>::GetPeriod' requested here
      return new Class(std::forward<Args>(args)...);
                 ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/detail/init.h:297:27: note: in instantiation of function template specialization 'pybind11::detail::initimpl::construct_or_initialize<semiwrap_Encoder_initializer::Encoder_Trampoline, int, int, bool, frc::CounterBase::EncodingType, 0>' requested here
                          = construct_or_initialize<Alias<Class>>(std::forward<Args>(args)...);
                            ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/pybind11.h:2004:14: note: in instantiation of function template specialization 'pybind11::detail::initimpl::constructor<int, int, bool, frc::CounterBase::EncodingType>::execute<pybind11::class_<frc::Encoder, pybindit::memory::smart_holder, semiwrap_Encoder_initializer::Encoder_Trampoline, frc::CounterBase, wpi::Sendable>, pybind11::arg, pybind11::arg, pybind11::arg_v, pybind11::arg_v, pybind11::call_guard<pybind11::gil_scoped_release>, pybind11::doc, 0>' requested here
          init.execute(*this, extra...);
               ^
  semiwrap/Encoder.cpp:65:10: note: in instantiation of function template specialization 'pybind11::class_<frc::Encoder, pybindit::memory::smart_holder, semiwrap_Encoder_initializer::Encoder_Trampoline, frc::CounterBase, wpi::Sendable>::def<int, int, bool, frc::CounterBase::EncodingType, pybind11::arg, pybind11::arg, pybind11::arg_v, pybind11::arg_v, pybind11::call_guard<pybind11::gil_scoped_release>, pybind11::doc>' requested here
          .def(py::init<int, int, bool, EncodingType>()
           ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/Encoder.h:178:5: note: 'GetPeriod' has been explicitly marked deprecated here
    [[deprecated("Use GetRate() in favor of this method")]]
      ^
  In file included from semiwrap/Encoder.cpp:9:
  semiwrap/trampolines/frc__Encoder.hpp:91:27: warning: 'SetMaxPeriod' is deprecated: Use SetMinRate() in favor of this method.  This takes unscaled periods and SetMinRate() scales using value from SetDistancePerPulse(). [-Wdeprecated-declarations]
        return CxxCallBase::SetMaxPeriod(std::move(maxPeriod));
                            ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/detail/init.h:77:16: note: in instantiation of member function 'frc::PyTrampoline_Encoder<frc::Encoder, frc::PyTrampolineCfg_Encoder<>>::SetMaxPeriod' requested here
      return new Class(std::forward<Args>(args)...);
                 ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/detail/init.h:297:27: note: in instantiation of function template specialization 'pybind11::detail::initimpl::construct_or_initialize<semiwrap_Encoder_initializer::Encoder_Trampoline, int, int, bool, frc::CounterBase::EncodingType, 0>' requested here
                          = construct_or_initialize<Alias<Class>>(std::forward<Args>(args)...);
                            ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/pybind11.h:2004:14: note: in instantiation of function template specialization 'pybind11::detail::initimpl::constructor<int, int, bool, frc::CounterBase::EncodingType>::execute<pybind11::class_<frc::Encoder, pybindit::memory::smart_holder, semiwrap_Encoder_initializer::Encoder_Trampoline, frc::CounterBase, wpi::Sendable>, pybind11::arg, pybind11::arg, pybind11::arg_v, pybind11::arg_v, pybind11::call_guard<pybind11::gil_scoped_release>, pybind11::doc, 0>' requested here
          init.execute(*this, extra...);
               ^
  semiwrap/Encoder.cpp:65:10: note: in instantiation of function template specialization 'pybind11::class_<frc::Encoder, pybindit::memory::smart_holder, semiwrap_Encoder_initializer::Encoder_Trampoline, frc::CounterBase, wpi::Sendable>::def<int, int, bool, frc::CounterBase::EncodingType, pybind11::arg, pybind11::arg, pybind11::arg_v, pybind11::arg_v, pybind11::call_guard<pybind11::gil_scoped_release>, pybind11::doc>' requested here
          .def(py::init<int, int, bool, EncodingType>()
           ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/Encoder.h:196:5: note: 'SetMaxPeriod' has been explicitly marked deprecated here
    [[deprecated(
      ^
  4 warnings generated.
  [650/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Errors.cpp.o
  [651/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._IterativeRobotBase.cpp.o
  semiwrap/IterativeRobotBase.cpp:215:72: warning: 'SetNetworkTablesFlushEnabled' is deprecated: Deprecated without replacement. [-Wdeprecated-declarations]
          .def("setNetworkTablesFlushEnabled", &frc::IterativeRobotBase::SetNetworkTablesFlushEnabled
                                                                         ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/IterativeRobotBase.h:212:5: note: 'SetNetworkTablesFlushEnabled' has been explicitly marked deprecated here
    [[deprecated("Deprecated without replacement.")]]
      ^
  1 warning generated.
  [652/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Joystick.cpp.o
  [653/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._LEDPattern.cpp.o
  [654/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._MotorSafety.cpp.o
  [655/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PS4Controller.cpp.o
  semiwrap/PS4Controller.cpp:569:50: warning: 'GetTouchpad' is deprecated: Use GetTouchpadButton instead [-Wdeprecated-declarations]
          .def("getTouchpad", &frc::PS4Controller::GetTouchpad
                                                   ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/PS4Controller.h:533:5: note: 'GetTouchpad' has been explicitly marked deprecated here
    [[deprecated("Use GetTouchpadButton instead")]]
      ^
  semiwrap/PS4Controller.cpp:580:57: warning: 'GetTouchpadPressed' is deprecated: Use GetTouchpadButtonPressed instead [-Wdeprecated-declarations]
          .def("getTouchpadPressed", &frc::PS4Controller::GetTouchpadPressed
                                                          ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/PS4Controller.h:543:5: note: 'GetTouchpadPressed' has been explicitly marked deprecated here
    [[deprecated("Use GetTouchpadButtonPressed instead")]]
      ^
  semiwrap/PS4Controller.cpp:591:58: warning: 'GetTouchpadReleased' is deprecated: Use GetTouchpadButtonReleased instead [-Wdeprecated-declarations]
          .def("getTouchpadReleased", &frc::PS4Controller::GetTouchpadReleased
                                                           ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/PS4Controller.h:554:5: note: 'GetTouchpadReleased' has been explicitly marked deprecated here
    [[deprecated("Use GetTouchpadButtonReleased instead")]]
      ^
  3 warnings generated.
  [656/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PS5Controller.cpp.o
  semiwrap/PS5Controller.cpp:568:50: warning: 'GetTouchpad' is deprecated: Use GetTouchpadButton instead [-Wdeprecated-declarations]
          .def("getTouchpad", &frc::PS5Controller::GetTouchpad
                                                   ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/PS5Controller.h:533:5: note: 'GetTouchpad' has been explicitly marked deprecated here
    [[deprecated("Use GetTouchpadButton instead")]]
      ^
  semiwrap/PS5Controller.cpp:579:57: warning: 'GetTouchpadPressed' is deprecated: Use GetTouchpadButtonPressed instead [-Wdeprecated-declarations]
          .def("getTouchpadPressed", &frc::PS5Controller::GetTouchpadPressed
                                                          ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/PS5Controller.h:543:5: note: 'GetTouchpadPressed' has been explicitly marked deprecated here
    [[deprecated("Use GetTouchpadButtonPressed instead")]]
      ^
  semiwrap/PS5Controller.cpp:590:58: warning: 'GetTouchpadReleased' is deprecated: Use GetTouchpadButtonReleased instead [-Wdeprecated-declarations]
          .def("getTouchpadReleased", &frc::PS5Controller::GetTouchpadReleased
                                                           ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/PS5Controller.h:554:5: note: 'GetTouchpadReleased' has been explicitly marked deprecated here
    [[deprecated("Use GetTouchpadButtonReleased instead")]]
      ^
  3 warnings generated.
  [657/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PWM.cpp.o
  [658/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Preferences.cpp.o
  [659/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PneumaticsBase.cpp.o
  [660/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PneumaticsModuleType.cpp.o
  [661/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Notifier.cpp.o
  [662/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PneumaticHub.cpp.o
  [663/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PowerDistribution.cpp.o
  [664/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Relay.cpp.o
  [665/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PneumaticsControlModule.cpp.o
  [666/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._RobotController.cpp.o
  [667/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._RobotBase.cpp.o
  [668/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._RobotState.cpp.o
  [669/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._RuntimeType.cpp.o
  [670/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._SensorUtil.cpp.o
  [671/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._SPI.cpp.o
  [672/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._SerialPort.cpp.o
  [673/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Servo.cpp.o
  [674/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Solenoid.cpp.o
  [675/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._StadiaController.cpp.o
  semiwrap/StadiaController.cpp:585:55: warning: 'GetLeftBumper' is deprecated: Use GetLeftBumperButton instead [-Wdeprecated-declarations]
          .def("getLeftBumper", &frc::StadiaController::GetLeftBumper
                                                        ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/StadiaController.h:548:5: note: 'GetLeftBumper' has been explicitly marked deprecated here
    [[deprecated("Use GetLeftBumperButton instead")]]
      ^
  semiwrap/StadiaController.cpp:596:56: warning: 'GetRightBumper' is deprecated: Use GetRightBumperButton instead [-Wdeprecated-declarations]
          .def("getRightBumper", &frc::StadiaController::GetRightBumper
                                                         ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/StadiaController.h:559:5: note: 'GetRightBumper' has been explicitly marked deprecated here
    [[deprecated("Use GetRightBumperButton instead")]]
      ^
  semiwrap/StadiaController.cpp:607:62: warning: 'GetLeftBumperPressed' is deprecated: Use GetLeftBumperButtonPressed instead [-Wdeprecated-declarations]
          .def("getLeftBumperPressed", &frc::StadiaController::GetLeftBumperPressed
                                                               ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/StadiaController.h:570:5: note: 'GetLeftBumperPressed' has been explicitly marked deprecated here
    [[deprecated("Use GetLeftBumperButtonPressed instead")]]
      ^
  semiwrap/StadiaController.cpp:618:63: warning: 'GetRightBumperPressed' is deprecated: Use GetRightBumperButtonPressed instead [-Wdeprecated-declarations]
          .def("getRightBumperPressed", &frc::StadiaController::GetRightBumperPressed
                                                                ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/StadiaController.h:581:5: note: 'GetRightBumperPressed' has been explicitly marked deprecated here
    [[deprecated("Use GetRightBumperButtonPressed instead")]]
      ^
  semiwrap/StadiaController.cpp:629:63: warning: 'GetLeftBumperReleased' is deprecated: Use GetLeftBumperButtonReleased instead [-Wdeprecated-declarations]
          .def("getLeftBumperReleased", &frc::StadiaController::GetLeftBumperReleased
                                                                ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/StadiaController.h:592:5: note: 'GetLeftBumperReleased' has been explicitly marked deprecated here
    [[deprecated("Use GetLeftBumperButtonReleased instead")]]
      ^
  semiwrap/StadiaController.cpp:640:64: warning: 'GetRightBumperReleased' is deprecated: Use GetRightBumperButtonReleased instead [-Wdeprecated-declarations]
          .def("getRightBumperReleased", &frc::StadiaController::GetRightBumperReleased
                                                                 ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/StadiaController.h:603:5: note: 'GetRightBumperReleased' has been explicitly marked deprecated here
    [[deprecated("Use GetRightBumperButtonReleased instead")]]
      ^
  6 warnings generated.
  [676/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._SharpIR.cpp.o
  [677/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._SynchronousInterrupt.cpp.o
  [678/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Threads.cpp.o
  [679/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Timer.cpp.o
  [680/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._TimesliceRobot.cpp.o
  [681/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Tracer.cpp.o
  [682/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Watchdog.cpp.o
  [683/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._TimedRobot.cpp.o
  [684/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Ultrasonic.cpp.o
  [685/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._XboxController.cpp.o
  semiwrap/XboxController.cpp:494:53: warning: 'GetLeftBumper' is deprecated: Use GetLeftBumperButton instead [-Wdeprecated-declarations]
          .def("getLeftBumper", &frc::XboxController::GetLeftBumper
                                                      ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/XboxController.h:453:5: note: 'GetLeftBumper' has been explicitly marked deprecated here
    [[deprecated("Use GetLeftBumperButton instead")]]
      ^
  semiwrap/XboxController.cpp:505:54: warning: 'GetRightBumper' is deprecated: Use GetRightBumperButton instead [-Wdeprecated-declarations]
          .def("getRightBumper", &frc::XboxController::GetRightBumper
                                                       ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/XboxController.h:464:5: note: 'GetRightBumper' has been explicitly marked deprecated here
    [[deprecated("Use GetRightBumperButton instead")]]
      ^
  semiwrap/XboxController.cpp:516:60: warning: 'GetLeftBumperPressed' is deprecated: Use GetLeftBumperButtonPressed instead [-Wdeprecated-declarations]
          .def("getLeftBumperPressed", &frc::XboxController::GetLeftBumperPressed
                                                             ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/XboxController.h:475:5: note: 'GetLeftBumperPressed' has been explicitly marked deprecated here
    [[deprecated("Use GetLeftBumperButtonPressed instead")]]
      ^
  semiwrap/XboxController.cpp:527:61: warning: 'GetRightBumperPressed' is deprecated: Use GetRightBumperButtonPressed instead [-Wdeprecated-declarations]
          .def("getRightBumperPressed", &frc::XboxController::GetRightBumperPressed
                                                              ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/XboxController.h:486:5: note: 'GetRightBumperPressed' has been explicitly marked deprecated here
    [[deprecated("Use GetRightBumperButtonPressed instead")]]
      ^
  semiwrap/XboxController.cpp:538:61: warning: 'GetLeftBumperReleased' is deprecated: Use GetLeftBumperButtonReleased instead [-Wdeprecated-declarations]
          .def("getLeftBumperReleased", &frc::XboxController::GetLeftBumperReleased
                                                              ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/XboxController.h:497:5: note: 'GetLeftBumperReleased' has been explicitly marked deprecated here
    [[deprecated("Use GetLeftBumperButtonReleased instead")]]
      ^
  semiwrap/XboxController.cpp:549:62: warning: 'GetRightBumperReleased' is deprecated: Use GetRightBumperButtonReleased instead [-Wdeprecated-declarations]
          .def("getRightBumperReleased", &frc::XboxController::GetRightBumperReleased
                                                               ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/XboxController.h:508:5: note: 'GetRightBumperReleased' has been explicitly marked deprecated here
    [[deprecated("Use GetRightBumperButtonReleased instead")]]
      ^
  6 warnings generated.
  [686/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._DriverStationModeThread.cpp.o
  [687/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._LiveWindow.cpp.o
  [688/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._MotorControllerGroup.cpp.o
  [689/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Jaguar.cpp.o
  [690/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._DMC60.cpp.o
  [691/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PWMMotorController.cpp.o
  [692/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PWMSparkFlex.cpp.o
  [693/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._NidecBrushless.cpp.o
  [694/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PWMSparkMax.cpp.o
  [695/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PWMTalonFX.cpp.o
  [696/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PWMTalonSRX.cpp.o
  [697/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PWMVenom.cpp.o
  [698/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._PWMVictorSPX.cpp.o
  [699/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Victor.cpp.o
  [700/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Spark.cpp.o
  [701/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Talon.cpp.o
  [702/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._SD540.cpp.o
  [703/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._VictorSP.cpp.o
  [704/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Mechanism2d.cpp.o
  In file included from semiwrap/Mechanism2d.cpp:7:
  In file included from semiwrap/trampolines/frc__Mechanism2d.hpp:13:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/ntcore/trampolines/nt__NTSendable.hpp:13:
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/wpiutil/trampolines/wpi__Sendable.hpp:27:10: warning: 'wpi::PyTrampoline_Sendable<frc::Mechanism2d, frc::PyTrampolineCfg_Mechanism2d<>>::InitSendable' hides overloaded virtual function [-Woverloaded-virtual]
      void InitSendable(SendableBuilder& builder) override {
           ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/ntcore/trampolines/nt__NTSendable.hpp:36:34: note: in instantiation of template class 'wpi::PyTrampoline_Sendable<frc::Mechanism2d, frc::PyTrampolineCfg_Mechanism2d<>>' requested here
  struct PyTrampoline_NTSendable : PyTrampolineBase_NTSendable<PyTrampolineBase, PyTrampolineCfg> {
                                   ^
  semiwrap/trampolines/frc__Mechanism2d.hpp:35:35: note: in instantiation of template class 'nt::PyTrampoline_NTSendable<frc::Mechanism2d, frc::PyTrampolineCfg_Mechanism2d<>>' requested here
  struct PyTrampoline_Mechanism2d : PyTrampolineBase_Mechanism2d<PyTrampolineBase, PyTrampolineCfg> {
                                    ^
  semiwrap/Mechanism2d.cpp:17:35: note: in instantiation of template class 'frc::PyTrampoline_Mechanism2d<frc::Mechanism2d, frc::PyTrampolineCfg_Mechanism2d<>>' requested here
    struct Mechanism2d_Trampoline : frc::PyTrampoline_Mechanism2d<typename frc::Mechanism2d, typename frc::PyTrampolineCfg_Mechanism2d<>>, py::trampoline_self_life_support {
                                    ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/smartdashboard/Mechanism2d.h:79:8: note: hidden overloaded virtual function 'frc::Mechanism2d::InitSendable' declared here: type mismatch at 1st parameter ('nt::NTSendableBuilder &' vs 'SendableBuilder &')
    void InitSendable(nt::NTSendableBuilder& builder) override;
         ^
  1 warning generated.
  [705/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Field2d.cpp.o
  In file included from semiwrap/Field2d.cpp:9:
  In file included from semiwrap/trampolines/frc__Field2d.hpp:13:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/ntcore/trampolines/nt__NTSendable.hpp:13:
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/wpiutil/trampolines/wpi__Sendable.hpp:27:10: warning: 'wpi::PyTrampoline_Sendable<frc::Field2d, frc::PyTrampolineCfg_Field2d<>>::InitSendable' hides overloaded virtual function [-Woverloaded-virtual]
      void InitSendable(SendableBuilder& builder) override {
           ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/ntcore/trampolines/nt__NTSendable.hpp:36:34: note: in instantiation of template class 'wpi::PyTrampoline_Sendable<frc::Field2d, frc::PyTrampolineCfg_Field2d<>>' requested here
  struct PyTrampoline_NTSendable : PyTrampolineBase_NTSendable<PyTrampolineBase, PyTrampolineCfg> {
                                   ^
  semiwrap/trampolines/frc__Field2d.hpp:35:31: note: in instantiation of template class 'nt::PyTrampoline_NTSendable<frc::Field2d, frc::PyTrampolineCfg_Field2d<>>' requested here
  struct PyTrampoline_Field2d : PyTrampolineBase_Field2d<PyTrampolineBase, PyTrampolineCfg> {
                                ^
  semiwrap/Field2d.cpp:19:31: note: in instantiation of template class 'frc::PyTrampoline_Field2d<frc::Field2d, frc::PyTrampolineCfg_Field2d<>>' requested here
    struct Field2d_Trampoline : frc::PyTrampoline_Field2d<typename frc::Field2d, typename frc::PyTrampolineCfg_Field2d<>>, py::trampoline_self_life_support {
                                ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/smartdashboard/Field2d.h:88:8: note: hidden overloaded virtual function 'frc::Field2d::InitSendable' declared here: type mismatch at 1st parameter ('nt::NTSendableBuilder &' vs 'SendableBuilder &')
    void InitSendable(nt::NTSendableBuilder& builder) override;
         ^
  1 warning generated.
  [706/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._FieldObject2d.cpp.o
  [707/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._MechanismLigament2d.cpp.o
  [708/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._MechanismObject2d.cpp.o
  [709/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._MechanismRoot2d.cpp.o
  [710/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._SendableChooser_tmpl1.cpp.o
  [711/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._SendableChooser.cpp.o
  [712/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._SendableChooserBase.cpp.o
  [713/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._SendableBuilderImpl.cpp.o
  [714/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._SmartDashboard.cpp.o
  [715/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._SysIdRoutineLog.cpp.o
  [716/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Color8Bit.cpp.o
  [717/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/.._.._wpilib_src_main.cpp.o
  [718/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/meson-generated_.._.._Color.cpp.o
  [719/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/.._.._wpilib_src_rpy_ControlWord.cpp.o
  [720/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/.._.._wpilib_src_rpy_SmartDashboardData.cpp.o
  [721/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/.._.._wpilib_src_rpy_MotorControllerGroup.cpp.o
  [722/885] Compiling C++ object semiwrap/modules/_wpilib.cpython-313-darwin.so.p/.._.._wpilib_src_rpy_Notifier.cpp.o
  [723/885] Compiling C++ object semiwrap/modules/_counter.cpython-313-darwin.so.p/meson-generated_.._.._UpDownCounter.cpp.o
  [724/885] Compiling C++ object semiwrap/modules/_counter.cpython-313-darwin.so.p/meson-generated_.._.._EdgeConfiguration.cpp.o
  [725/885] Compiling C++ object semiwrap/modules/_counter.cpython-313-darwin.so.p/meson-generated_.._.._ExternalDirectionCounter.cpp.o
  [726/885] Compiling C++ object semiwrap/modules/_counter.cpython-313-darwin.so.p/meson-generated_.._.._Tachometer.cpp.o
  [727/885] Compiling C++ object semiwrap/modules/_drive.cpython-313-darwin.so.p/meson-generated_.._.._RobotDriveBase.cpp.o
  [728/885] Compiling C++ object semiwrap/modules/_drive.cpython-313-darwin.so.p/.._.._wpilib_drive_drive.cpp.o
  [729/885] Compiling C++ object semiwrap/modules/_counter.cpython-313-darwin.so.p/.._.._wpilib_counter_counter.cpp.o
  [730/885] Compiling C++ object semiwrap/modules/_drive.cpython-313-darwin.so.p/meson-generated_.._.._DifferentialDrive.cpp.o
  [731/885] Compiling C++ object semiwrap/modules/_drive.cpython-313-darwin.so.p/meson-generated_.._.._MecanumDrive.cpp.o
  [732/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._BuiltInLayouts.cpp.o
  [733/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._BuiltInWidgets.cpp.o
  [734/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._Shuffleboard.cpp.o
  [735/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ComplexWidget.cpp.o
  [736/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent.cpp.o
  [737/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent_tmpl2.cpp.o
  [738/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent_tmpl1.cpp.o
  [739/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent_tmpl3.cpp.o
  [740/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._LayoutType.cpp.o
  [741/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent_tmpl4.cpp.o
  [742/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent_tmpl5.cpp.o
  [743/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent_tmpl7.cpp.o
  [744/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent_tmpl6.cpp.o
  [745/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent_tmpl8.cpp.o
  [746/885] Linking target semiwrap/modules/_counter.cpython-313-darwin.so
  [747/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent_tmpl9.cpp.o
  [748/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent_tmpl10.cpp.o
  [749/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent_tmpl12.cpp.o
  [750/885] Linking target semiwrap/modules/_drive.cpython-313-darwin.so
  [751/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent_tmpl11.cpp.o
  [752/885] Linking target semiwrap/modules/_wpilib.cpython-313-darwin.so
  [753/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent_tmpl13.cpp.o
  [754/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponent_tmpl14.cpp.o
  [755/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardContainer.cpp.o
  [756/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardEventImportance.cpp.o
  [757/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardComponentBase.cpp.o
  [758/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardInstance.cpp.o
  [759/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardValue.cpp.o
  [760/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardWidget_tmpl2.cpp.o
  [761/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardWidget_tmpl4.cpp.o
  [762/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardWidget_tmpl5.cpp.o
  [763/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardLayout.cpp.o
  [764/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardRoot.cpp.o
  In file included from semiwrap/ShuffleboardRoot.cpp:2:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/include/semiwrap.h:5:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/pybind11.h:12:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/detail/class.h:12:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/attr.h:13:
  In file included from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/detail/common.h:257:
  In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/forward_list:217:
  /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__memory/unique_ptr.h:68:5: warning: delete called on 'frc::ShuffleboardRoot' that is abstract but has non-virtual destructor [-Wdelete-abstract-non-virtual-dtor]
      delete __ptr;
      ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/detail/struct_smart_holder.h:96:5: note: in instantiation of member function 'std::default_delete<frc::ShuffleboardRoot>::operator()' requested here
      std::default_delete<T>{}(static_cast<T *>(raw_ptr));
      ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/detail/struct_smart_holder.h:109:27: note: in instantiation of function template specialization 'pybindit::memory::builtin_delete_if_destructible<frc::ShuffleboardRoot, 0>' requested here
      return guarded_delete(builtin_delete_if_destructible<T>, armed_flag);
                            ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/detail/struct_smart_holder.h:269:19: note: in instantiation of function template specialization 'pybindit::memory::make_guarded_builtin_delete<frc::ShuffleboardRoot>' requested here
          auto gd = make_guarded_builtin_delete<T>(true);
                    ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/pybind11.h:2316:71: note: in instantiation of function template specialization 'pybindit::memory::smart_holder::from_raw_ptr_take_ownership<frc::ShuffleboardRoot>' requested here
                  new (uninitialized_location) holder_type(holder_type::from_raw_ptr_take_ownership(
                                                                        ^
  /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/semiwrap/pybind11/include/pybind11/pybind11.h:1915:32: note: in instantiation of function template specialization 'pybind11::class_<frc::ShuffleboardRoot, pybindit::memory::smart_holder, semiwrap_ShuffleboardRoot_initializer::ShuffleboardRoot_Trampoline>::init_instance<pybindit::memory::smart_holder, 0>' requested here
          record.init_instance = init_instance;
                                 ^
  semiwrap/ShuffleboardRoot.cpp:26:5: note: in instantiation of function template specialization 'pybind11::class_<frc::ShuffleboardRoot, pybindit::memory::smart_holder, semiwrap_ShuffleboardRoot_initializer::ShuffleboardRoot_Trampoline>::class_<>' requested here
      cls_ShuffleboardRoot(m, "_ShuffleboardRoot"),
      ^
  1 warning generated.
  [765/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardTab.cpp.o
  [766/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardWidget.cpp.o
  [767/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardWidget_tmpl1.cpp.o
  [768/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardWidget_tmpl3.cpp.o
  [769/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardWidget_tmpl6.cpp.o
  [770/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardWidget_tmpl7.cpp.o
  [771/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardWidget_tmpl8.cpp.o
  [772/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardWidget_tmpl13.cpp.o
  [773/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardWidget_tmpl11.cpp.o
  [774/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardWidget_tmpl12.cpp.o
  [775/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardWidget_tmpl9.cpp.o
  [776/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._ShuffleboardWidget_tmpl10.cpp.o
  [777/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._SimpleWidget.cpp.o
  [778/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._SuppliedValueWidget_tmpl2.cpp.o
  [779/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._SuppliedValueWidget.cpp.o
  [780/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._SuppliedValueWidget_tmpl1.cpp.o
  [781/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._SuppliedValueWidget_tmpl3.cpp.o
  [782/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._SuppliedValueWidget_tmpl5.cpp.o
  [783/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._SuppliedValueWidget_tmpl6.cpp.o
  [784/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._SuppliedValueWidget_tmpl7.cpp.o
  [785/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._SuppliedValueWidget_tmpl8.cpp.o
  [786/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._SuppliedValueWidget_tmpl4.cpp.o
  [787/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._SuppliedValueWidget_tmpl10.cpp.o
  [788/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._SuppliedValueWidget_tmpl11.cpp.o
  [789/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/.._.._wpilib_shuffleboard_shuffleboard.cpp.o
  [790/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._SuppliedValueWidget_tmpl9.cpp.o
  [791/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/meson-generated_.._.._WidgetType.cpp.o
  [792/885] Compiling C++ object semiwrap/modules/_shuffleboard.cpython-313-darwin.so.p/.._.._wpilib_shuffleboard_ShuffleboardData.cpp.o
  [793/885] Linking target semiwrap/modules/_shuffleboard.cpython-313-darwin.so
  [794/885] Generating semiwrap/DifferentialDrivetrainSim.dat with a custom command
  [795/885] Generating semiwrap/DCMotorSim.dat with a custom command
  WARNING: some items not in /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib/semiwrap/simulation/DCMotorSim.yml for /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/native/wpilib/include/frc/simulation/DCMotorSim.h
  classes:
    frc::sim::DCMotorSim:
      methods:
        SetAngle:
        SetAngularVelocity:

  [796/885] Generating semiwrap/ElevatorSim.dat with a custom command
  [797/885] Generating semiwrap/trampolines/frc__sim__DifferentialDrivetrainSim__KitbotMotor.hpp with a custom command
  [798/885] Generating semiwrap/trampolines/frc__sim__DifferentialDrivetrainSim__KitbotWheelSize.hpp with a custom command
  [799/885] Generating semiwrap/trampolines/frc__sim__DifferentialDrivetrainSim__State.hpp with a custom command
  [800/885] Generating semiwrap/trampolines/frc__sim__DifferentialDrivetrainSim__KitbotGearing.hpp with a custom command
  [801/885] Generating semiwrap/DifferentialDrivetrainSim.cpp with a custom command
  [802/885] Generating semiwrap/trampolines/frc__sim__DifferentialDrivetrainSim.hpp with a custom command
  [803/885] Generating semiwrap/DCMotorSim.cpp with a custom command
  [804/885] Generating semiwrap/trampolines/frc__sim__DCMotorSim.hpp with a custom command
  [805/885] Generating semiwrap/FlywheelSim.dat with a custom command
  [806/885] Generating semiwrap/ElevatorSim.cpp with a custom command
  [807/885] Generating semiwrap/trampolines/frc__sim__ElevatorSim.hpp with a custom command
  [808/885] Generating semiwrap/FlywheelSim.cpp with a custom command
  [809/885] Generating semiwrap/trampolines/frc__sim__FlywheelSim.hpp with a custom command
  [810/885] Generating semiwrap/LinearSystemSim.dat with a custom command
  [811/885] Generating semiwrap/LinearSystemSim_tmpl2.cpp with a custom command
  [812/885] Generating semiwrap/LinearSystemSim_tmpl5.cpp with a custom command
  [813/885] Generating semiwrap/LinearSystemSim_tmpl1.cpp with a custom command
  [814/885] Generating semiwrap/LinearSystemSim.cpp with a custom command
  [815/885] Generating semiwrap/LinearSystemSim_tmpl6.cpp with a custom command
  [816/885] Generating semiwrap/LinearSystemSim_tmpl3.cpp with a custom command
  [817/885] Generating semiwrap/LinearSystemSim_tmpl4.cpp with a custom command
  [818/885] Generating semiwrap/LinearSystemSim_tmpl.hpp with a custom command
  [819/885] Generating semiwrap/trampolines/frc__sim__LinearSystemSim.hpp with a custom command
  [820/885] Generating semiwrap/SingleJointedArmSim.dat with a custom command
  [821/885] Generating semiwrap/SingleJointedArmSim.cpp with a custom command
  [822/885] Generating semiwrap/trampolines/frc__sim__SingleJointedArmSim.hpp with a custom command
  [823/885] Generating semiwrap/semiwrap_init.wpilib.simulation._simulation.hpp with a custom command
  [824/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._ADXL345Sim.cpp.o
  [825/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._AnalogOutputSim.cpp.o
  [826/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._AnalogInputSim.cpp.o
  [827/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._AnalogTriggerSim.cpp.o
  [828/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._BuiltInAccelerometerSim.cpp.o
  [829/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._CallbackStore.cpp.o
  [830/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._ADXL362Sim.cpp.o
  [831/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._DIOSim.cpp.o
  [832/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._AddressableLEDSim.cpp.o
  [833/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._CTREPCMSim.cpp.o
  [834/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._ADIS16470_IMUSim.cpp.o
  [835/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._BatterySim.cpp.o
  [836/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._ADXRS450_GyroSim.cpp.o
  [837/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._AnalogEncoderSim.cpp.o
  [838/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._AnalogGyroSim.cpp.o
  [839/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._ADIS16448_IMUSim.cpp.o
  [840/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._DCMotorSim.cpp.o
  [841/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._DifferentialDrivetrainSim.cpp.o
  [842/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._DigitalPWMSim.cpp.o
  [843/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._DriverStationSim.cpp.o
  [844/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._GenericHIDSim.cpp.o
  [845/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._DoubleSolenoidSim.cpp.o
  [846/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._DutyCycleSim.cpp.o
  [847/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._EncoderSim.cpp.o
  [848/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._DutyCycleEncoderSim.cpp.o
  [849/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._ElevatorSim.cpp.o
  [850/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._JoystickSim.cpp.o
  [851/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._PS4ControllerSim.cpp.o
  [852/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._LinearSystemSim_tmpl1.cpp.o
  [853/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._LinearSystemSim_tmpl3.cpp.o
  [854/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._LinearSystemSim_tmpl4.cpp.o
  [855/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._FlywheelSim.cpp.o
  [856/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._LinearSystemSim.cpp.o
  [857/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._LinearSystemSim_tmpl2.cpp.o
  [858/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._LinearSystemSim_tmpl5.cpp.o
  [859/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._LinearSystemSim_tmpl6.cpp.o
  [860/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._PS5ControllerSim.cpp.o
  [861/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._PWMSim.cpp.o
  [862/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._PneumaticsBaseSim.cpp.o
  [863/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._PowerDistributionSim.cpp.o
  [864/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._RelaySim.cpp.o
  [865/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._REVPHSim.cpp.o
  [866/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._RoboRioSim.cpp.o
  [867/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._SharpIRSim.cpp.o
  [868/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._SPIAccelerometerSim.cpp.o
  [869/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._SimDeviceSim.cpp.o
  [870/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._SendableChooserSim.cpp.o
  [871/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._SimHooks.cpp.o
  [872/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._StadiaControllerSim.cpp.o
  [873/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._XboxControllerSim.cpp.o
  [874/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._SolenoidSim.cpp.o
  [875/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/.._.._wpilib_simulation_simulation.cpp.o
  [876/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._UltrasonicSim.cpp.o
  [877/885] Compiling C++ object semiwrap/modules/_simulation.cpython-313-darwin.so.p/meson-generated_.._.._SingleJointedArmSim.cpp.o
  [878/885] Linking target semiwrap/modules/_simulation.cpython-313-darwin.so
  [879/885] Generating semiwrap/modules/_event.pyi with a custom command
  [880/885] Generating semiwrap/modules/_interfaces.pyi with a custom command
  [881/885] Generating semiwrap/modules/_shuffleboard.pyi with a custom command
  [882/885] Generating semiwrap/modules/_drive.pyi with a custom command
  [883/885] Generating semiwrap/modules/__init__.pyi with a custom command
  [884/885] Generating semiwrap/modules/_counter.pyi with a custom command
  [885/885] Generating semiwrap/modules/_simulation.pyi with a custom command
  Traceback (most recent call last):
    File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 195, in prepare_metadata_for_build_editable
      hook = backend.prepare_metadata_for_build_editable
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  AttributeError: module 'hatchling.build' has no attribute 'prepare_metadata_for_build_editable'

  During handling of the above exception, another exception occurred:

  Traceback (most recent call last):
    File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 389, in <module>
      main()
      ~~~~^^
    File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 373, in main
      json_out["return_val"] = hook(**hook_input["kwargs"])
                               ~~~~^^^^^^^^^^^^^^^^^^^^^^^^
    File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 204, in prepare_metadata_for_build_editable
      whl_basename = build_hook(metadata_directory, config_settings)
    File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/hatchling/build.py", line 83, in build_editable
      return os.path.basename(next(builder.build(directory=wheel_directory, versions=['editable'])))
                              ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/hatchling/builders/plugin/interface.py", line 155, in build
      artifact = version_api[version](directory, **build_data)
    File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/hatchling/builders/wheel.py", line 496, in build_editable
      return self.build_editable_detection(directory, **build_data)
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/hatchling/builders/wheel.py", line 499, in build_editable_detection
      from editables import EditableProject
  ModuleNotFoundError: No module named 'editables'
  error: subprocess-exited-with-error
  
  × Preparing editable metadata (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> See above for output.
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  full command: /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/bin/python3 /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py prepare_metadata_for_build_editable /var/folders/2j/dtyvm0j92kg6vkknn2np8tlr0000gn/T/tmpcg8k4h6j
  cwd: /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-wpilib
  Preparing editable metadata (pyproject.toml) ... error
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/devtools/__main__.py", line 100, in <module>
    main()
    ~~~~^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/click/core.py", line 1442, in __call__
    return self.main(*args, **kwargs)
           ~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/click/core.py", line 1363, in main
    rv = self.invoke(ctx)
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/click/core.py", line 1830, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/click/core.py", line 1226, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/click/core.py", line 794, in invoke
    return callback(*args, **kwargs)
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/click/decorators.py", line 46, in new_func
    return f(get_current_context().obj, *args, **kwargs)
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/devtools/__main__.py", line 55, in develop
    project.develop()
    ~~~~~~~~~~~~~~~^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/devtools/subproject.py", line 46, in develop
    run_pip("install", "-v", "-e", ".", "--no-build-isolation", cwd=self.path)
    ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/devtools/util.py", line 53, in run_pip
    run_cmd(sys.executable, "-m", "pip", "--disable-pip-version-check", *args, cwd=cwd)
    ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/devtools/util.py", line 49, in run_cmd
    subprocess.check_call(args, cwd=cwd)
    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/subprocess.py", line 419, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '('/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/.venv13TryRobotPyBuildEditable/bin/python3', '-m', 'pip', '--disable-pip-version-check', 'install', '-v', '-e', '.', '--no-build-isolation')' returned non-zero exit status 1.

@MikeStitt
Copy link
Collaborator Author

Could use a suggestion as to what the best build editable process is now.

@virtuald
Copy link
Member

You need to pip install editables. I should add that to the rdev_requirements.txt.

Additionally, due to pypackaging-native/pkgconf-pypi#70, you should do pip install pkgconf==2.3.0.post2.

@MikeStitt
Copy link
Collaborator Author

MikeStitt commented May 21, 2025

@virtuald Thanks.

This now works.

python -m pip install editables
python -m pip install pkgconf==2.3.0.post2
./rdev.sh develop robotpy-wpilib
pytest subprojects/robotpy-wpilib/tests

@MikeStitt
Copy link
Collaborator Author

@virtuald this doesn't work yet:

1362  cd mostrobotpy
 1363  python -m pip --disable-pip-version-check install -r rdev_requirements.txt
 1364  python -m pip --disable-pip-version-check install numpy
 1365  history 0
 1366  python -m pip install editables
 1367  python -m pip install pkgconf==2.3.0.post2
 1368  ./rdev.sh develop
 1369  python -VV

results in:

python -m pip install editables
Collecting editables
  Using cached editables-0.5-py3-none-any.whl.metadata (3.1 kB)
Using cached editables-0.5-py3-none-any.whl (5.1 kB)
Installing collected packages: editables
Successfully installed editables-0.5
(.venv13TryRobotPyBuildEditable) mikestitt@peas mostrobotpy % !1327
python -m pip install pkgconf==2.3.0.post2
Collecting pkgconf==2.3.0.post2
  Using cached pkgconf-2.3.0.post2-py3-none-macosx_11_0_arm64.whl.metadata (4.5 kB)
Using cached pkgconf-2.3.0.post2-py3-none-macosx_11_0_arm64.whl (45 kB)
Installing collected packages: pkgconf
Successfully installed pkgconf-2.3.0.post2
(.venv13TryRobotPyBuildEditable) mikestitt@peas mostrobotpy % ./rdev.sh develop
+ /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/bin/python3 -m pip --disable-pip-version-check install -v -e . --no-build-isolation
Using pip 25.1.1 from /Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip (python 3.13)
Obtaining file:///Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/subprojects/robotpy-native-wpiutil
  Running command Checking if build backend supports build_editable
  Checking if build backend supports build_editable ... done
ERROR: Exception:
Traceback (most recent call last):
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/cli/base_command.py", line 105, in _run_wrapper
    status = _inner_run()
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/cli/base_command.py", line 96, in _inner_run
    return self.run(options, args)
           ~~~~~~~~^^^^^^^^^^^^^^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/cli/req_command.py", line 68, in wrapper
    return func(self, options, args)
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/commands/install.py", line 387, in run
    requirement_set = resolver.resolve(
        reqs, check_supported_wheels=not options.target_dir
    )
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 77, in resolve
    collected = self.factory.collect_root_requirements(root_reqs)
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 545, in collect_root_requirements
    reqs = list(
        self._make_requirements_from_install_req(
    ...<2 lines>...
        )
    )
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 501, in _make_requirements_from_install_req
    cand = self._make_base_candidate_from_link(
        ireq.link,
    ...<2 lines>...
        version=None,
    )
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 212, in _make_base_candidate_from_link
    self._editable_candidate_cache[link] = EditableCandidate(
                                           ~~~~~~~~~~~~~~~~~^
        link,
        ^^^^^
    ...<3 lines>...
        version=version,
        ^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 331, in __init__
    super().__init__(
    ~~~~~~~~~~~~~~~~^
        link=link,
        ^^^^^^^^^^
    ...<4 lines>...
        version=version,
        ^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 159, in __init__
    self.dist = self._prepare()
                ~~~~~~~~~~~~~^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 236, in _prepare
    dist = self._prepare_distribution()
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 341, in _prepare_distribution
    return self._factory.preparer.prepare_editable_requirement(self._ireq)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/operations/prepare.py", line 703, in prepare_editable_requirement
    dist = _get_prepared_distribution(
        req,
    ...<3 lines>...
        self.check_build_deps,
    )
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/operations/prepare.py", line 71, in _get_prepared_distribution
    abstract_dist.prepare_distribution_metadata(
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        finder, build_isolation, check_build_deps
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/distributions/sdist.py", line 69, in prepare_distribution_metadata
    self.req.prepare_metadata()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/req/req_install.py", line 567, in prepare_metadata
    and self.supports_pyproject_editable
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/functools.py", line 1037, in __get__
    val = self.func(instance)
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_internal/req/req_install.py", line 258, in supports_pyproject_editable
    return "build_editable" in self.pep517_backend._supported_features()
                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_impl.py", line 180, in _supported_features
    return self._call_hook("_supported_features", {})
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_impl.py", line 402, in _call_hook
    raise BackendUnavailable(
    ...<4 lines>...
    )
pip._vendor.pyproject_hooks._impl.BackendUnavailable: Cannot import 'hatchling.build'
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/devtools/__main__.py", line 100, in <module>
    main()
    ~~~~^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/click/core.py", line 1442, in __call__
    return self.main(*args, **kwargs)
           ~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/click/core.py", line 1363, in main
    rv = self.invoke(ctx)
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/click/core.py", line 1830, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/click/core.py", line 1226, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/click/core.py", line 794, in invoke
    return callback(*args, **kwargs)
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/lib/python3.13/site-packages/click/decorators.py", line 46, in new_func
    return f(get_current_context().obj, *args, **kwargs)
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/devtools/__main__.py", line 61, in develop
    project.develop()
    ~~~~~~~~~~~~~~~^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/devtools/subproject.py", line 46, in develop
    run_pip("install", "-v", "-e", ".", "--no-build-isolation", cwd=self.path)
    ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/devtools/util.py", line 53, in run_pip
    run_cmd(sys.executable, "-m", "pip", "--disable-pip-version-check", *args, cwd=cwd)
    ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/mostrobotpy/devtools/util.py", line 49, in run_cmd
    subprocess.check_call(args, cwd=cwd)
    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
  File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/subprocess.py", line 419, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '('/Users/mikestitt/Documents/first/pythonExperiments/tryRobotPyBuildEditable/.venv13TryRobotPyBuildEditable/bin/python3', '-m', 'pip', '--disable-pip-version-check', 'install', '-v', '-e', '.', '--no-build-isolation')' returned non-zero exit status 2.
(.venv13TryRobotPyBuildEditable) mikestitt@peas mostrobotpy % python -VV
Python 3.13.0 (v3.13.0:60403a5409f, Oct  7 2024, 00:37:40) [Clang 15.0.0 (clang-1500.3.9.4)]
python -m pip list
Package         Version
--------------- -----------
black           25.1.0
build           1.2.2.post1
click           8.2.1
editables       0.5
iniconfig       2.1.0
mypy_extensions 1.1.0
ninja           1.11.1.4
numpy           2.2.6
packaging       25.0
pathspec        0.12.1
pip             25.1.1
pkgconf         2.3.0.post2
platformdirs    4.3.8
pluggy          1.6.0
pyproject_hooks 1.2.0
pytest          8.3.5
tomli           2.2.1
tomlkit         0.13.2
toposort        1.10
validobj        1.3

@virtuald
Copy link
Member

Tracking the rdev issues at #172

@MikeStitt
Copy link
Collaborator Author

MikeStitt commented May 22, 2025

Documenting a path that does allow me to robotpy sim a simple robot with this branch:

these steps work:

 1387  deactivate ; rm -rf .venv13TryRobotPyBuildEditable ; python3 -m venv .venv13TryRobotPyBuildEditable ; . .venv13TryRobotPyBuildEditable/bin/activate ; pip install --upgrade pip;
 1388  cd mostrobotpy
 1389  pip install -r rdev_requirements.txt
 1391  python -m pip --disable-pip-version-check install numpy
 1392  python -m pip install editables
 1393  python -m pip install pkgconf==2.3.0.post2
 1394  ./rdev.sh ci check-pyproject
 1395  ./rdev.sh ci build-other-wheels
 1396  python -m devtools ci build-meson-wheels
 1397  ./rdev.sh develop robotpy-wpilib
 1398  pytest subprojects/robotpy-wpilib/tests

This didn't work because robotpy sim is not a valid command:

 1401  cd ../../minTestRobot
 1406  robotpy sim

This didn't work because robotpy sim no longer uses the the wpilib from this branch.

 1407  pip uinstall robotpy
 1408  pip uninstall robotpy
 1409  pip list
 1410  pip install robotpy
 1411  robotpy sim

This didn't work because robotpy sim no longer uses the the wpilib from this branch.

 1413  pip uninstall robotpy
 1416  pip install robotpy==2025.3.2.1
 1418  robotpy sim

This works because robotpy sim now uses the the wpilib from this branch.

 1423  cd ../tryRobotPyBuildEditable/mostrobotpy
 1426  python -m devtools ci build-meson-wheels
 1429  cd ../../minTestRobot
 1432  robotpy sim

This works because robotpy sim now uses the editable wplilib from this branch:

 1435  cd ../tryRobotPyBuildEditable/mostrobotpy
 1438  ./rdev.sh develop robotpy-wpilib
 1442  cd ../../minTestRobot
 1443  robotpy sim

For reference robot.py is:

import sys
import wpilib

from wpilib import RobotController
from wpilib.timedrobotpy import TimedRobotPy

def printEntryAndExit(func):
    def wrapper(*args, **kwargs):
        #name = inspect.currentframe().f_code.co_name
        name = func.__name__
        print(f"{RobotController.getFPGATime()/1000_000.0:.3f}:Enter:{name}")
        result = func(*args, **kwargs)
        print(f"{RobotController.getFPGATime()/1000_000.0:.3f}:Exit :{name}")
        return result
    return wrapper

class MyRobot(TimedRobotPy):

    @printEntryAndExit
    def startCompetition(self):
        super().startCompetition()

    @printEntryAndExit
    def endCompetition(self):
        super().endCompetition()

    @printEntryAndExit
    def robotInit(self):
        pass

    @printEntryAndExit
    def robotPeriodic(self):
        pass

    @printEntryAndExit
    def autonomousInit(self):
        pass

    @printEntryAndExit
    def autonomousPeriodic(self):
        pass

    @printEntryAndExit
    def autonomousExit(self):
        pass

    @printEntryAndExit
    def disabledInit(self):
        pass

    @printEntryAndExit
    def disabledPeriodic(self):
        pass

    @printEntryAndExit
    def disabledExit(self):
        pass

    @printEntryAndExit
    def _simulationInit(self):
        pass

    @printEntryAndExit
    def _simulationPeriodic(self):
        pass

def remoteRIODebugSupport():
    if __debug__ and "run" in sys.argv:
        print("Starting Remote Debug Support....")
        try:
            import debugpy  # pylint: disable=import-outside-toplevel
        except ModuleNotFoundError:
            pass
        else:
            debugpy.listen(("0.0.0.0", 5678))
            debugpy.wait_for_client()

@MikeStitt
Copy link
Collaborator Author

I have this simulateable robot.py program: https://github.com/MikeStitt/pythonExperiments/blob/main/minTestRobot/robot.py

That can simulate with the C++ TimedRobot or the python TimedRobot.py on my 14-Inch, Nov 2023 Mac Book Pro, with the Apple M3 Max.

The robot.py program uses addPeriodic to add 10 extra periodic tasks to the robot.

With the legacy c++ TimedRobot the results are:

MINTESTROBOT_USE_TIMEDRROBOT=1 robotpy sim       
17:46:04:302 INFO    : faulthandler        : registered SIGUSR2 for PID 49130
17:46:04:303 INFO    : halsim_gui          : WPILib HAL Simulation 2025.3.2.2
HAL Extensions: Attempting to load: libhalsim_gui
Simulator GUI Initializing.
2025-05-22 17:46:04.362 Python[49130:22922681] WARNING: Secure coding is automatically enabled for restorable state! However, not on all supported macOS versions of this application. Opt-in to secure coding explicitly by implementing NSApplicationDelegate.applicationSupportsSecureRestorableState:.
Simulator GUI Initialized!
HAL Extensions: Successfully loaded extension
17:46:04:402 INFO    : pyfrc.physics       : Physics support successfully enabled
17:46:04:402 INFO    : wpilib              : RobotPy version 2025.3.2.1
17:46:04:402 INFO    : wpilib              : WPILib version 2025.3.2.2
17:46:04:402 INFO    : wpilib              : Running with simulated HAL.
17:46:04:405 INFO    : nt                  : Listening on NT3 port 1735, NT4 port 5810
Not loading CameraServerShared

********** Robot program startup complete **********
commonCallCount=100=self._callCount[loopStartTime]=100
avgDeltaCallTimesUs[loopStartTime]=0.0
commonCallCount=100=self._callCount[disabledPeriodic]=100
avgDeltaCallTimesUs[disabledPeriodic]=35.91
commonCallCount=100=self._callCount[robotPeriodic]=100
avgDeltaCallTimesUs[robotPeriodic]=49.09
commonCallCount=100=self._callCount[0]=100
avgDeltaCallTimesUs[0]=81.28
commonCallCount=100=self._callCount[1]=100
avgDeltaCallTimesUs[1]=83.5
commonCallCount=100=self._callCount[2]=100
avgDeltaCallTimesUs[2]=85.02
commonCallCount=100=self._callCount[3]=100
avgDeltaCallTimesUs[3]=86.25
commonCallCount=100=self._callCount[4]=100
avgDeltaCallTimesUs[4]=87.48
commonCallCount=100=self._callCount[5]=100
avgDeltaCallTimesUs[5]=87.42
commonCallCount=100=self._callCount[6]=100
avgDeltaCallTimesUs[6]=88.8
commonCallCount=100=self._callCount[7]=100
avgDeltaCallTimesUs[7]=89.8
commonCallCount=100=self._callCount[8]=100
avgDeltaCallTimesUs[8]=90.56
commonCallCount=100=self._callCount[9]=100
avgDeltaCallTimesUs[9]=91.37
17:46:06:438 WARNING : your.robot          : Unexpected return from startCompetition() method.

Order of magnitude, it takes 81.28 microseconds to get to the first added task. and 91.37 microseconds to get to the 10th one.

Switching to TimedRobotPy:

MINTESTROBOT_USE_TIMEDRROBOT=0 robotpy sim
17:55:04:097 INFO    : faulthandler        : registered SIGUSR2 for PID 49205
17:55:04:099 INFO    : halsim_gui          : WPILib HAL Simulation 2025.3.2.2
HAL Extensions: Attempting to load: libhalsim_gui
Simulator GUI Initializing.
2025-05-22 17:55:04.160 Python[49205:22929466] WARNING: Secure coding is automatically enabled for restorable state! However, not on all supported macOS versions of this application. Opt-in to secure coding explicitly by implementing NSApplicationDelegate.applicationSupportsSecureRestorableState:.
Simulator GUI Initialized!
HAL Extensions: Successfully loaded extension
17:55:04:200 INFO    : pyfrc.physics       : Physics support successfully enabled
17:55:04:201 INFO    : wpilib              : RobotPy version 2025.3.2.1
17:55:04:201 INFO    : wpilib              : WPILib version 2025.3.2.2
17:55:04:201 INFO    : wpilib              : Running with simulated HAL.
17:55:04:204 INFO    : nt                  : Listening on NT3 port 1735, NT4 port 5810
Not loading CameraServerShared
********** Robot program startup complete **********
commonCallCount=100=self._callCount[loopStartTime]=100
avgDeltaCallTimesUs[loopStartTime]=0.0
commonCallCount=100=self._callCount[disabledPeriodic]=100
avgDeltaCallTimesUs[disabledPeriodic]=68.81
commonCallCount=100=self._callCount[robotPeriodic]=100
avgDeltaCallTimesUs[robotPeriodic]=79.2
commonCallCount=100=self._callCount[0]=100
avgDeltaCallTimesUs[0]=136.41
commonCallCount=100=self._callCount[1]=100
avgDeltaCallTimesUs[1]=140.28
commonCallCount=100=self._callCount[2]=100
avgDeltaCallTimesUs[2]=142.45
commonCallCount=100=self._callCount[3]=100
avgDeltaCallTimesUs[3]=144.5
commonCallCount=100=self._callCount[4]=100
avgDeltaCallTimesUs[4]=147.51
commonCallCount=100=self._callCount[5]=100
avgDeltaCallTimesUs[5]=147.31
commonCallCount=100=self._callCount[6]=100
avgDeltaCallTimesUs[6]=150.31
commonCallCount=100=self._callCount[7]=100
avgDeltaCallTimesUs[7]=152.24
commonCallCount=100=self._callCount[8]=100
avgDeltaCallTimesUs[8]=154.08
commonCallCount=100=self._callCount[9]=100
avgDeltaCallTimesUs[9]=156.23
17:55:06:238 WARNING : your.robot          : Unexpected return from startCompetition() method.

Order of magnitude the python TimedRobotPy takes 136.41 microseconds to get to the first extra task and 156.23 micoseconds to get to the 10th extra task.

On the MacBook Pro, concentrating on the time to get to the first extra task, the python version is, order of magnitude, 50 microseconds slower.

If we can figure out how to run this code on a RoboRio, and the results are reasonable, I feel like this task is getting close to being complete.

@MikeStitt
Copy link
Collaborator Author

Next steps:
--- Test timing on roborio (I have a roborio, but I don't know how to get this code on a roborio)
--- Run with teams real robot code in simulation and on roborios
--- Determine if both the c++ TimedRobot and the python TimedRobotPy will exist

@MikeStitt
Copy link
Collaborator Author

@virtuald Could you look at https://github.com/robotpy/mostrobotpy/actions/runs/15209970105 ? The failure doesn't seem to relate to my changes.

@MikeStitt
Copy link
Collaborator Author

MikeStitt commented May 23, 2025

I was able to do some timing measurements on my roborio 2 by copying timedrobotpy.py and iterativerobotpy.py into my robot project by hand.

Order of magnitude, timedrobotpy.py adds 300 microseconds to the time it takes to go from the start of the frame to the completion of the default self._loopFunc task over what it takes in C++ TimedRobot.

@MikeStitt MikeStitt force-pushed the pyIterativeAndTimedRobot branch from 9b71587 to 3f3d25e Compare May 24, 2025 12:10
Signed-off-by: Mike Stitt <mike@stitt.cc>
@MikeStitt MikeStitt force-pushed the pyIterativeAndTimedRobot branch from fcfd3ac to 302d070 Compare May 28, 2025 23:10
MikeStitt added 3 commits May 28, 2025 19:42
Signed-off-by: Mike Stitt <mike@stitt.cc>
Signed-off-by: Mike Stitt <mike@stitt.cc>
Signed-off-by: Mike Stitt <mike@stitt.cc>
@MikeStitt
Copy link
Collaborator Author

MikeStitt commented May 29, 2025

Documenting the steps to sim:

deactivate ; rm -rf .venv13TryRobotPyBuildEditable ; python3 -m venv .venv13TryRobotPyBuildEditable ; . .venv13TryRobotPyBuildEditable/bin/activate ; pip install --upgrade pip; pushd mostrobotpy; python -m pip install -r rdev_requirements.txt;  python -m pip install editables; python -m pip install pkgconf==2.3.0.post2; pip install numpy; python -m devtools ci build-meson-wheels; popd

pip install --upgrade --upgrade-strategy only-if-needed robotpy

# Location of test code: https://github.com/MikeStitt/pythonExperiments/tree/main/minTestRobotLocalTimedRobotPy
cd ..\..\minTestRobotLocalTimedRobotPy
robotpy sim --nogui

Results:

08:29:57:231 INFO    : faulthandler        : registered SIGUSR2 for PID 36238
08:29:57:233 INFO    : pyfrc.physics       : Physics support successfully enabled
08:29:57:234 INFO    : wpilib              : RobotPy version 2025.3.2.2
08:29:57:234 INFO    : wpilib              : WPILib version 2025.3.2.2
08:29:57:234 INFO    : wpilib              : Running with simulated HAL.
08:29:57:237 INFO    : nt                  : Listening on NT3 port 1735, NT4 port 5810
Not loading CameraServerShared
robotInit Done RobotParentClass=TimedRobotPy
self._callbacks=_OrderedListMin
********** Robot program startup complete **********
commonCallCount=1000
avgDeltaCallTimesUs[loopStartTime]=0.0
avgDeltaCallTimesUs[disabledPeriodic]=62.132
avgDeltaCallTimesUs[robotPeriodic]=73.112
avgDeltaCallTimesUs[0]=134.772
avgDeltaCallTimesUs[1]=141.964
08:30:17:272 WARNING : your.robot          : Unexpected return from startCompetition() method.

Comparing to a simulation of c++ TimedRobot:

robotpy sim --nogui
08:40:48:319 INFO    : faulthandler        : registered SIGUSR2 for PID 36320
08:40:48:322 INFO    : pyfrc.physics       : Physics support successfully enabled
08:40:48:323 INFO    : wpilib              : RobotPy version 2025.3.2.2
08:40:48:323 INFO    : wpilib              : WPILib version 2025.3.2.2
08:40:48:323 INFO    : wpilib              : Running with simulated HAL.
08:40:48:328 INFO    : nt                  : Listening on NT3 port 1735, NT4 port 5810
Not loading CameraServerShared
robotInit Done RobotParentClass=TimedRobot

********** Robot program startup complete **********
commonCallCount=1000
avgDeltaCallTimesUs[loopStartTime]=0.0
avgDeltaCallTimesUs[disabledPeriodic]=36.858
avgDeltaCallTimesUs[robotPeriodic]=50.961
avgDeltaCallTimesUs[0]=91.799
avgDeltaCallTimesUs[1]=96.439
08:41:08:365 WARNING : your.robot          : Unexpected return from startCompetition() method.

@MikeStitt
Copy link
Collaborator Author

TimedRobotPy on a Roborio 2:

[1214.50] Thu May 29 09:22:57 EDT 2025 - Killing robot code in frcKillRobot.sh
[1218.13] 09:23:01:369 INFO    : faulthandler        : registered SIGUSR2 for PID 23768
[1218.33] 09:23:01:574 INFO    : deploy-info         : mikestitt@peas.local at 2025-05-29T09:22:51
[1218.33] 09:23:01:575 INFO    : deploy-info         : - git info: fa5c2b0 (branch=main)
[1218.34] 09:23:01:576 INFO    : wpilib              : RobotPy version 2025.3.2.2
[1218.34] 09:23:01:577 INFO    : wpilib              : WPILib version 2025.3.2.2
[1218.36] 09:23:01:603 INFO    : nt                  : Listening on NT3 port 1735, NT4 port 5810
[1218.37] Camera Server Library Not Found
[1218.37] robotInit Done RobotParentClass=TimedRobotPy
[1218.37] self._callbacks=_OrderedListMin
[1218.38] ********** Robot program startup complete **********
[1218.47] 09:23:01:713 INFO    : nt                  : Got a NT4 connection from 10.91.6.162 port 62436
[1218.47] 09:23:01:715 INFO    : nt                  : CONNECTED NT4 client 'Dashboard@1' (from 10.91.6.162:62436)
[1238.39] commonCallCount=1000
[1238.39] avgDeltaCallTimesUs[loopStartTime]=0.0
[1238.39] avgDeltaCallTimesUs[disabledPeriodic]=344.209
[1238.39] avgDeltaCallTimesUs[robotPeriodic]=423.489
[1238.40] avgDeltaCallTimesUs[0]=745.445
[1238.40] avgDeltaCallTimesUs[1]=804.281
[1238.40] 09:23:21:641 WARNING : your.robot          : Unexpected return from startCompetition() method.
[1238.51] 1 Unexpected return from startCompetition() method. <frozen runpy>:198 
[1238.51] Warning at <frozen runpy>:198: Unexpected return from startCompetition() method.
[1238.51] 
[0.00] 09:23:25:710 INFO    : faulthandler        : registered SIGUSR2 for PID 23869
[0.16] 09:23:25:869 INFO    : deploy-info         : mikestitt@peas.local at 2025-05-29T09:22:51
[0.16] 09:23:25:870 INFO    : deploy-info         : - git info: fa5c2b0 (branch=main)
[0.16] 09:23:25:871 INFO    : wpilib              : RobotPy version 2025.3.2.2
[0.16] 09:23:25:872 INFO    : wpilib              : WPILib version 2025.3.2.2
[0.18] 09:23:25:895 INFO    : nt                  : Listening on NT3 port 1735, NT4 port 5810
[0.20] Camera Server Library Not Found
[0.20] robotInit Done RobotParentClass=TimedRobotPy
[0.20] self._callbacks=_OrderedListMin
[0.20] ********** Robot program startup complete **********
[0.41] 09:23:26:118 INFO    : nt                  : Got a NT4 connection from 10.91.6.162 port 62516
[0.41] 09:23:26:119 INFO    : nt                  : CONNECTED NT4 client 'Dashboard@1' (from 10.91.6.162:62516)
[17.22] 09:23:42:932 INFO    : nt                  : DISCONNECTED NT4 client 'Dashboard@1' (from 10.91.6.162:62516): connection timed out
[19.43] 09:23:45:139 INFO    : nt                  : Got a NT4 connection from 10.91.6.162 port 62572
[19.43] 09:23:45:140 INFO    : nt                  : CONNECTED NT4 client 'Dashboard@1' (from 10.91.6.162:62572)
[20.22] commonCallCount=1000
[20.22] avgDeltaCallTimesUs[loopStartTime]=0.0
[20.22] avgDeltaCallTimesUs[disabledPeriodic]=350.439
[20.22] avgDeltaCallTimesUs[robotPeriodic]=434.62
[20.22] avgDeltaCallTimesUs[0]=774.965
[20.22] avgDeltaCallTimesUs[1]=841.14
[20.23] 09:23:45:937 WARNING : your.robot          : Unexpected return from startCompetition() method.
[20.34] 1 Unexpected return from startCompetition() method. <frozen runpy>:198 
[20.34] Warning at <frozen runpy>:198: Unexpected return from startCompetition() method.
[20.34] 
[0.00] 09:23:49:996 INFO    : faulthandler        : registered SIGUSR2 for PID 23970
[0.16] 09:23:50:154 INFO    : deploy-info         : mikestitt@peas.local at 2025-05-29T09:22:51
[0.16] 09:23:50:154 INFO    : deploy-info         : - git info: fa5c2b0 (branch=main)
[0.16] 09:23:50:155 INFO    : wpilib              : RobotPy version 2025.3.2.2
[0.16] 09:23:50:156 INFO    : wpilib              : WPILib version 2025.3.2.2
[0.18] 09:23:50:179 INFO    : nt                  : Listening on NT3 port 1735, NT4 port 5810
[0.19] Camera Server Library Not Found
[0.20] robotInit Done RobotParentClass=TimedRobotPy
[0.20] self._callbacks=_OrderedListMin
[0.20] ********** Robot program startup complete **********
[0.63] 09:23:50:628 INFO    : nt                  : Got a NT4 connection from 10.91.6.162 port 62589
[0.63] 09:23:50:629 INFO    : nt                  : CONNECTED NT4 client 'Dashboard@1' (from 10.91.6.162:62589)
[20.22] commonCallCount=1000
[20.22] avgDeltaCallTimesUs[loopStartTime]=0.0
[20.22] avgDeltaCallTimesUs[disabledPeriodic]=316.416
[20.22] avgDeltaCallTimesUs[robotPeriodic]=394.015
[20.22] avgDeltaCallTimesUs[0]=722.333
[20.22] avgDeltaCallTimesUs[1]=782.302
[20.22] 09:24:10:222 WARNING : your.robot          : Unexpected return from startCompetition() method.
[20.33] 1 Unexpected return from startCompetition() method. <frozen runpy>:198 

Compared to c++ TimedRobot:

[0.00] 09:27:57:964 INFO    : faulthandler        : registered SIGUSR2 for PID 25089
[0.16] 09:27:58:124 INFO    : deploy-info         : mikestitt@peas.local at 2025-05-29T09:27:27
[0.16] 09:27:58:126 INFO    : deploy-info         : - git info: fa5c2b0-dirty (branch=main)
[0.16] 09:27:58:126 INFO    : wpilib              : RobotPy version 2025.3.2.2
[0.16] 09:27:58:127 INFO    : wpilib              : WPILib version 2025.3.2.2
[0.19] 09:27:58:150 INFO    : nt                  : Listening on NT3 port 1735, NT4 port 5810
[0.20] Camera Server Library Not Found
[0.20] robotInit Done RobotParentClass=TimedRobot
[0.20] 
[0.20] ********** Robot program startup complete **********
[0.31] 09:27:58:275 INFO    : nt                  : Got a NT4 connection from 10.91.6.162 port 61377
[0.31] 09:27:58:276 INFO    : nt                  : CONNECTED NT4 client 'Dashboard@1' (from 10.91.6.162:61377)
[20.22] commonCallCount=1000
[20.22] avgDeltaCallTimesUs[loopStartTime]=0.0
[20.22] avgDeltaCallTimesUs[disabledPeriodic]=189.122
[20.22] avgDeltaCallTimesUs[robotPeriodic]=275.389
[20.22] avgDeltaCallTimesUs[0]=423.7
[20.22] avgDeltaCallTimesUs[1]=464.648
[20.22] 09:28:18:186 WARNING : your.robot          : Unexpected return from startCompetition() method.
[20.33] 1 Unexpected return from startCompetition() method. <frozen runpy>:198 
[20.33] Warning at <frozen runpy>:198: Unexpected return from startCompetition() method.
[20.33] 
[20.66] *** Error in `/usr/local/bin/python3': corrupted double-linked list: 0x02052cd0 ***
[-0.00] 09:28:22:217 INFO    : faulthandler        : registered SIGUSR2 for PID 25190
[0.16] 09:28:22:377 INFO    : deploy-info         : mikestitt@peas.local at 2025-05-29T09:27:27
[0.16] 09:28:22:378 INFO    : deploy-info         : - git info: fa5c2b0-dirty (branch=main)
[0.16] 09:28:22:379 INFO    : wpilib              : RobotPy version 2025.3.2.2
[0.16] 09:28:22:380 INFO    : wpilib              : WPILib version 2025.3.2.2
[0.19] 09:28:22:404 INFO    : nt                  : Listening on NT3 port 1735, NT4 port 5810
[0.20] Camera Server Library Not Found
[0.20] robotInit Done RobotParentClass=TimedRobot
[0.20] 
[0.20] ********** Robot program startup complete **********
[0.24] 09:28:22:456 INFO    : nt                  : Got a NT4 connection from 10.91.6.162 port 57979
[0.24] 09:28:22:457 INFO    : nt                  : CONNECTED NT4 client 'Dashboard@1' (from 10.91.6.162:57979)
[20.22] commonCallCount=1000
[20.22] avgDeltaCallTimesUs[loopStartTime]=0.0
[20.22] avgDeltaCallTimesUs[disabledPeriodic]=191.344
[20.22] avgDeltaCallTimesUs[robotPeriodic]=276.768
[20.22] avgDeltaCallTimesUs[0]=427.305
[20.22] avgDeltaCallTimesUs[1]=469.57
[20.22] 09:28:42:441 WARNING : your.robot          : Unexpected return from startCompetition() method.
[20.33] 1 Unexpected return from startCompetition() method. <frozen runpy>:198 
[20.34] Warning at <frozen runpy>:198: Unexpected return from startCompetition() method.
[20.34] 

Order of magnitude, 750-420, TimedRobotPy and IterativeRobotPy add about 330 microseconds to a robot periodic loop.

To install the libraries, I unzipped:

pushd ~/wpilib/2025/robotpy/pip_cache
unzip ~/Downloads/cross-other-roborio.zip
unzip ~/Downloads/cross-meson-roborio.zip
popd

Then:

pushd pythonExperiments/minTestRobotLocalTimedRobotPy
robotpy deploy --skip-tests --force-install

Signed-off-by: Mike Stitt <mike@stitt.cc>
@MikeStitt
Copy link
Collaborator Author

@virtuald @auscompgeek I'm at the stage where I'm running out of next steps on this pull request. Perhaps you could look it over again.

return f"{{func={self.func.__name__}, _periodUs={self._periodUs}, expirationUs={self.expirationUs}}}"


class _OrderedListSort:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems to be unused.

Comment on lines +21 to +22
_kResourceType_Framework = tResourceType.kResourceType_Framework
_kFramework_Timed = tInstances.kFramework_Timed
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems like an excessive over-optimisation. These constants are only used once at robot start. Putting this here makes all robot code pay the cost of reading this, even if they're not using TimedRobot.


from .iterativerobotpy import IterativeRobotPy

_getFPGATime = RobotController.getFPGATime
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think putting this in the robot instance, to avoid the global lookup, will probably be faster?

return True

def __repr__(self) -> str:
return f"{{func={self.func.__name__}, _periodUs={self._periodUs}, expirationUs={self.expirationUs}}}"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should probably just be a dataclass, rather than reimplementing __repr__ by hand?

if self.isTestEnabled():
raise RuntimeError("Can't configure test mode while in test mode!")
if not self._reportedLw and testLW:
report(_kResourceType_SmartDashboard, _kSmartDashboard_LiveWindow)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This method shouldn't be on the critical path for the control loop, so no need to try to optimise accessing globals here.

_kResourceType_Framework = tResourceType.kResourceType_Framework
_kFramework_Timed = tInstances.kFramework_Timed

microsecondsAsInt = int
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
microsecondsAsInt = int
microseconds: TypeAlias = int

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants